java.lang.NullPointerException我在做什么错?

问题描述

我正在一个项目中,我的意图是执行一项玉米工作并将邮件发送给我的朋友,祝他们生日快乐,我能够从MysqL DB获得电子邮件并将其与当前日期进行比较,但是在发送电子邮件时,我收到NullPointerException。

我确定应用程序属性没有问题,我也将它们与其他项目一起使用,并且它们可以正常运行

//Imports
package dev.teja.happybirthday;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.persistence.*;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.validation.constraints.Email;
import freemarker.template.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.bind.annotation.*;

//Main
@SpringBootApplication
public class HappybirthdayApplication {
    public static void main(String[] args) {
        SpringApplication.run(HappybirthdayApplication.class,args);
    }
    @Autowired
    MyFriendsRepository myFriendsRepository ;
    @Scheduled(cron = "*/30 * * * * *")
    void WishMyFriends() {
        List<MyFriends> myFriendsList = myFriendsRepository.findAll();
        myFriendsList.forEach(friend -> {
            Date date = new Date();
            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM");
            String CurrentDate= formatter.format(date);
            String Givendate = formatter.format(friend.dob);
            if (Givendate.equals(CurrentDate)){
                Job job = new Job();
                Map<String,Object> model = new HashMap<>();
                model.put("Name",friend.name);
                job.sendWish(friend.email,model);
            }
        });
    }
}
@Configuration
@ConditionalOnProperty(name = "scheduling.enabled",matchIfMissing = true)
@EnableScheduling
class Tasks {
}
//Model
@Data
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
class MyFriends {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;
    String name;
    @Email
    @Column(unique = true)
    String email;
    @JsonFormat(pattern = "dd/MM/yyyy",shape = JsonFormat.Shape.STRING)
    Date dob;
    Long phoneNumber;
}
//Repository
interface MyFriendsRepository extends JpaRepository<MyFriends,Long> {
}
@RestController
@RequestMapping("/")
class FriendsController {
    @Autowired
    MyFriendsRepository myFriendsRepository;
    @PostMapping("/friends")
    ResponseEntity<MyFriends> createFriend(@RequestBody MyFriends myFriend) {
        myFriendsRepository.save(myFriend);
        return new ResponseEntity<MyFriends>(myFriend,HttpStatus.CREATED);
    }
    @GetMapping("/friends")
    List<MyFriends> getFriends() {
        return myFriendsRepository.findAll();
    }
}
//Interface
interface wisher{
    void sendWish(String email,Map<String,Object> model);
}
//Implementation
@Service
class Job implements wisher{
    @Autowired
    private JavaMailSender sender;
    @Autowired
    private freemarker.template.Configuration config;
    @Override
    public void sendWish(String email,Object> model) {
        System.out.println("wishes sent to "+ email);
        MimeMessage message = sender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message,MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,StandardCharsets.UTF_8.name());
            Template template = config.getTemplate("new-template.ftl");
            String html = FreeMarkerTemplateUtils.processtemplateIntoString(template,model);
            helper.setTo(email);
            helper.setFrom("kondasaitej@gmail.com");
            helper.setSubject("Happy Birthday");
            helper.setText(html,true);
            sender.send(message);
        } catch (MessagingException | IOException | TemplateException e) {
            e.printstacktrace();
        }
    }
}

Friends Table

./resources/Templates中的

FreeMaker文件

/**
 * FREEMAKER new-template.ftl
 * <html xmlns="http://www.w3.org/1999/xhtml">
 * <head>
 *     <Meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 *     <title>Comment Alert Mail</title>
 * </head>
 * <body>
 * <p>happy birthday ${Name}</p>
 * </body>
 */

这是我正在得到的错误


Hibernate: select myfriends0_.id as id1_0_,myfriends0_.dob as dob2_0_,myfriends0_.email as email3_0_,myfriends0_.name as name4_0_,myfriends0_.phone_number as phone_nu5_0_ from my_friends myfriends0_
wishes sent to kondasaitej@protonmail.com
2020-09-26 21:01:52.012 ERROR 84242 --- [   scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task

java.lang.NullPointerException: null
    at dev.teja.happybirthday.Job.sendWish(HappybirthdayApplication.java:115) ~[classes/:na]
    at dev.teja.happybirthday.HappybirthdayApplication.lambda$WishMyFriends$0(HappybirthdayApplication.java:53) ~[classes/:na]
    at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_251]
    at dev.teja.happybirthday.HappybirthdayApplication.WishMyFriends(HappybirthdayApplication.java:44) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) [spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_251]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_251]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_251]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_251]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_251]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_251]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_251]

解决方法

尝试添加进入@Autowired私有JavaMailSender发件人;

,

我认为您尚未实现JavaMailSender bean。如下定义一个bean。然后您的@Autowire批注将起作用。

@Bean
public JavaMailSender getJavaMailSender() 
{
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setHost("smtp.gmail.com");
    mailSender.setPort(25);
      
    mailSender.setUsername("admin@gmail.com");
    mailSender.setPassword("password");
      
    Properties props = mailSender.getJavaMailProperties();
    props.put("mail.transport.protocol","smtp");
    props.put("mail.smtp.auth","true");
    props.put("mail.smtp.starttls.enable","true");
    props.put("mail.debug","true");
      
    return mailSender;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...