RestTemplate确实在对象中发送空值

时间:2018-10-21 12:11:04

标签: spring rest spring-boot resttemplate

我已经使用Spring Boot编写了一个非常简单的EmailService。

控制器收到电子邮件请求并发送邮件:

@RestController
@Slf4j
public class EmailController {
    private final EmailService emailService;

    public EmailController(EmailService emailService) {
        this.emailService = emailService;
    }

    @PostMapping
    public ResponseEntity sendEmail(EmailRequest request) {
        try {
            emailService.sendEmail(request);
        } catch (Exception e) {
            log.error("Error while sending email", e);
            return ResponseEntity.badRequest().build();
        }
        return ResponseEntity.ok().build();
    }
}

我要测试另一个控制器中的行为,如下所示:

@Controller
public class TestController {
    @GetMapping
    public ResponseEntity testSend(){
        EmailRequest request = new EmailRequest();
        request.setTo("roger@example.com");
        request.setBody("This is the body");
        request.setSubject("This is a subject");
        return new RestTemplate().postForObject("http://localhost:9999",request,ResponseEntity.class);
    }
}

现在我设置了两个断点,一个是在通过RestTemplate发送请求之前。如预期的那样,正确填充了这些值。

接收控制器中的另一个断点正在显示EmailRequest null的所有值。

当我使用PostMan调用发送控制器时,它的工作正常,所以我可能对RestTemplate做错了。

有人知道可能是什么问题吗?

1 个答案:

答案 0 :(得分:0)

@RequestBody缺少@PostMapping

@PostMapping
public ResponseEntity sendEmail(@RequestBody  EmailRequest request) { }