В настоящее время у меня есть приложение с загрузочной пружиной (версия - 2.1.8.RELEASE), которое предоставляет остальные веб-службы, которые предоставляют некоторые базовые функции электронной почты.Я добавил компонент swagger и могу тестировать веб-сервис через интерфейс интерфейса swagger.Например, когда я тестирую веб-сервис через пользовательский интерфейс Swagger и не вводю обязательные поля, такие как mailfrom, я получаю сообщение об ошибке, в котором говорится, что emailfrom отсутствует с кодом состояния, чего я и ожидаю.
Но когдатот же сценарий выполняется с проектом Spring mvc (клиент для веб-службы - версия Spring 3.2.5.RELEASE), при этом не отображается описание ошибки, так как я ожидал, что при тестировании с использованием пользовательского интерфейса Swagger будет происходить то же поведение.Пожалуйста, смотрите результат скриншота при выполнении интеграционного теста ниже: 500 null :
Пожалуйста, найдите ниже контроллер покоя пружинного приложения ниже:
@RestController
@RequestMapping("/email")
public class EmailController {
private static final Logger LOG = LoggerFactory.getLogger(EmailController.class);
@Autowired
SendMailService sendMailService;
@ApiOperation(value = "This service send mail based on the information provided from EmailRequestDto", response = String.class)
@PostMapping(value = "/sendMail")
public @ResponseBody ResponseEntity<String> sendMail(@RequestBody EmailRequestDto emailRequestDto) {
LOG.debug("calling method sendMail");
sendMailService.sendEmail(emailRequestDto);
return new ResponseEntity<>("Mail has been sent successfully", HttpStatus.OK);
}
Ниже приведена часть класса обслуживания для отправки электронной почты:
@Component
public class SendMailServiceImpl implements SendMailService {
private static final Logger LOG = LoggerFactory.getLogger(SendMailServiceImpl.class);
@Autowired
private JavaMailSender javaMailSender;
/**
* {@inheritDoc}
*/
@Override
public void sendEmail(EmailRequestDto emailRequestDto) {
LOG.debug("calling method sendMail");
if (!ObjectUtils.isEmpty(emailRequestDto)) {
MimeMessage msg = javaMailSender.createMimeMessage();
// true = multipart message
MimeMessageHelper helper;
try {
helper = new MimeMessageHelper(msg, true);
helper.setFrom(emailRequestDto.getMailFrom());
helper.setTo(emailRequestDto.getMailTo().stream().toArray(String[]::new));
helper.setSubject(emailRequestDto.getSubject());
helper.setText(emailRequestDto.getEmailContent(), true);
// helper.addAttachment("my_photo.png", new ClassPathResource("android.png"));
javaMailSender.send(msg);
} catch (MessagingException e) {
throw new ResponseStatusException(
HttpStatus.NOT_FOUND, "Error occurred while send mail", e);
}
}
}
Ниже приведен мой интеграционный тест для вызова веб-службы из проекта клиента:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:dummy-service-test-context.xml" })
public class SendMailServiceTest {
@Test
public void testService() {
final String uri = "http://localhost:8080/email-service/email/sendMail";
EmailRequestDto emailRequestDto = new EmailRequestDto();
// emailRequestDto.setMailTo((Arrays.asList("dummy@gmail.com")));
// emailRequestDto.setEmailContent("Dear Sir");
// emailRequestDto.setMailFrom("dummy_38@hotmail.com");
// emailRequestDto.setSubject("Sending Email subject");
emailRequestDto.setMailTo(null);
emailRequestDto.setEmailContent(null);
emailRequestDto.setMailFrom(null);
emailRequestDto.setSubject(null);
HttpEntity<EmailRequestDto> request = new HttpEntity<>(emailRequestDto);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> es = restTemplate.exchange(uri, HttpMethod.POST, request,String.class);
// ResponseEntity<?> response = restTemplate.postForEntity(uri, request, ResponseEntity.class, new HashMap());
Assert.assertTrue(es.getStatusCode().equals(HttpStatus.OK));
}
}
Пожалуйста, найдите мой адрес электронной почты ниже:
@Getter
@Setter
@ApiModel
public class EmailRequestDto implements Serializable {
private static final long serialVersionUID = 1L;
private List<String> mailTo;
@ApiModelProperty(value = "Email address who is sending the mail", required = true)
@NonNull
private String mailFrom;
@ApiModelProperty(value = "Subject of the mail", required = true)
@NonNull
private String subject;
@ApiModelProperty(value = "The content of the mail", required = true)
@NonNull
private String emailContent;
private List<String> bcc;
@ApiModelProperty(value = "This attribute identify if the mail content should be sent as html or plain text", required = true)
@NonNull
boolean fileHtml;
Может кто-нибудь указать мне, что я делаю неправильно и почему я получаю 500 нулей, пожалуйста?
Когда я специально вставляю дату из нуля впринудительно завершить работу приложения в журнале весенней загрузки tomcat, исключение корректно:
mailFrom обязательно:
nested exception is com.fasterxml.jackson.databind.JsonMappingException: mailFrom is marked non-null but is null
Но в моем тесте интеграции клиента это:
org.springframework.web.client.HttpClientErrorException: 400 null