繁体   English   中英

我无法通过 Postman 测试我的 Spring Boot 邮件发件人 API

[英]I cant test my Spring Boot mail sender API by Postman

我无法通过 Postman 测试我的 Spring Boot 邮件发件人 API。 我想用spring boot创建一个api并发送邮件。 为此,我在下面分享了应用程序属性、服务和控制器类。 但是当我通过邮递员提供 url 并将 json body 添加到 post 方法时,我收到错误消息。 我该如何解决?

邮递员回复

{
    "timestamp": "2020-10-29T15:26:23.300+00:00",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/mail/send"
}

邮递员测试参数

url: http://localhost:8080/mail/send
method: post
JSON body: 

{
 "to" : "mail@gmail.com",
 "textBody" : "TEST",
 "topic" : "TEST"
}

应用属性

spring.mail.default-encoding=UTF-8
spring.mail.host=smtp.gmail.com
spring.mail.username=mail@gmail.com
spring.mail.password=password
spring.mail.port=587
spring.mail.protocol=smtp
spring.mail.test-connection=false
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

服务等级

@Service
public class SendEmailService {

    @Autowired
    private JavaMailSender javaMailSender;

    public void sendEmail(String to, String body, String topic){
        try {
            System.out.println("Mail sending is started");
            SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
            simpleMailMessage.setFrom("mutlueren01@gmail.com");
            simpleMailMessage.setTo(to);
            simpleMailMessage.setSubject(topic);
            simpleMailMessage.setText(body);
            javaMailSender.send(simpleMailMessage);
            System.out.println("Mail sending is completed");
        }catch (Exception e){
            System.out.println("Error occured: "+e.getMessage());
        }
    }
}

控制器

@Controller
public class SendEmailController {

    @Autowired
    SendEmailService sendEmailService;

    @RequestMapping(value = "/mail/send/", method = RequestMethod.POST)
    public void sendMail(@RequestParam("to") String to, @RequestParam("textBody") String textBody, @RequestParam("topic") String topic) {
        sendEmailService.sendEmail(to, textBody, topic);
    }

}

问题出在控制器中。 您正在发送请求正文(json),但试图处理请求参数。 阅读差异。

我建议创建一个类:

public class EmailSendingRequest {
String to;
String textBody;
String topic;
//... getters, setters
}

并按如下方式更改您的控制器方法:

    @RequestMapping(value = "/mail/send", method = RequestMethod.POST)
    public void sendMail(@RequestBody EmailSendingRequest emailSendingRequest) {
        sendEmailService.sendEmail(emailSendingRequest.getTo(), 
emailSendingRequest.getTextBody(), emailSendingRequest.getTopic());
    }

PS 或者你可以发送带有请求参数的请求并且不要改变任何东西 - 像http://localhost:8080/mail/send?to=mail@gmail.com&textBody=TEST&topic=TEST ,但我不确定这是否是个好主意。

该错误代码表示您要访问不存在的资源。 尝试更改以下注释:

    @RequestMapping(value = "/mail/send/", method = RequestMethod.POST)

    @RequestMapping(value = "/mail/send", method = RequestMethod.POST)

暂无
暂无

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

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