java - 我无法通过 Postman 测试我的 Spring Boot 邮件发件人 API
问题描述
我无法通过 Postman 测试我的 Spring Boot 邮件发件人 API。我想用spring boot创建一个api并发送邮件。为此,我在下面分享了应用程序属性、服务和控制器类。但是,当我通过邮递员提供 url 并将 json 正文添加到 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
,但我不确定这是否是个好主意。
推荐阅读
- flutter - Flutter:如何将可访问性焦点集中到自定义应用栏
- node.js - 在 JSDOM 中扩展元素方法
- javascript - 如何从传递给侦听器的回调中访问状态挂钩值?
- django - 主管/Gunicorn/Django:主管无法运行 gunicorn(启动时“已修复”)
- python-3.x - 我如何在 python 中列出 30 天以上的 aws 安全组?
- javascript - 我怎样才能生成颜色(不是偶然),使它们具有不同的颜色,而不是阴影?
- php - 如何在 paypal 中创建订单并同时发送电子邮件
- python - 您可以在模型集合中指定类权重吗?
- nativescript - Nativescript Angular让应用程序在后台播放
- python - 使用 Python PyPDF2 从扫描的 pdf(图像)中提取文本