繁体   English   中英

使用 springboot 发送 otp 邮件时出现 NullPointerException

[英]NullPointerException while send a otp mail using springboot

我正在尝试使用 springboot 发送 otp 邮件。 我已经创建了一个登录页面,邮件将从该页面提供给 sendotp()。 或者您可以提供有关如何使用 springboot 发送邮件 otp 的代码来提供帮助。 这是我的代码:

OtpController类 -


@Controller
public class OtpEmailController {
    
    private EmailSenderService emailService;

    Random random = new Random(1000);
    
    @PostMapping("/send-otp")
    public String sendOtp(@RequestParam("email") String email) {
        
        int otp = random.nextInt(999999);
        
        String subject = "OTP from session-handling-proj By Harshit";
        String toEmail = email;
        String body = "<h1> OTP = " + otp + "</h1>";
        
           this.emailService.sendMail(toEmail, subject, body);
          return ("success");
    }
    

电子邮件发件人服务 class:

@Service
public class EmailSenderService {

    @Autowired
    private JavaMailSender mailSender;
    
    public void sendMail(String toEmail,
                         String subject,
                         String body) {
        SimpleMailMessage message=new SimpleMailMessage();
        message.setFrom("growthgreek@gamil.com");
        message.setTo(toEmail);
        message.setText(body);
        message.setSubject(subject);
        
        mailSender.send(message);
        System.out.println("message sent .....");
        
        
    }
    
}

当我调用 sendOtp() 方法时,我在 springboot 中收到 NullPointerException 错误。

错误:

java.lang.NullPointerException: null
    at com.example.sessionHandling.sessionHandling.controller.OtpEmailController.sendOtp(OtpEmailController.java:31) ~[classes/:na]
    at com.example.sessionHandling.sessionHandling.controller.SessionHandlingController.loginUser(SessionHandlingController.java:65) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] 
............. 

我知道 OtpController 中存在一些问题,但无法弄清楚我到底需要做什么。

您 controller 需要知道emailService应该由 Spring 注入。

您可以添加@Autowired 注释:

@Autowired
private EmailSenderService emailService;

或者创建一个全参数构造函数

OtpEmailController(EmailSenderService emailService){
  this.emailService = emailService;
}

因为 class 被标记为 @Controller,所以 Spring 将通过绑定解析所有参数的构造函数注入 bean。

使用第二种方法,您可以使 emailService 成为最终的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM