在Spring Boot控制器中验证HTTP POST请求中的请求主体是否为null

时间:2019-07-15 10:44:23

标签: spring rest spring-boot controller httprequest

我正在替换Spring Boot REST控制器中对POST请求的输入的手动验证。 JSR-303 Spring Bean验证用于验证请求正文中的实例变量,该方法按预期工作。建议使用哪种方法来验证请求正文中的对象不为空?

我尝试过:

  • 注释整个对象,例如:@NotNull @Valid @RequestBody Foo foo

  • 使用@NotNull注释整个类

我要替换:

@PostMapping...
public ResponseEntity<Map<String, Object>> editFoo(
@RequestBody Foo foo, ...) {
   if(foo == null) {
      return (new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST));
   }
}

具有等效的Bean验证:

@PostMapping...
public ResponseEntity<Map<String, Object>> editFoo(
@Valid @RequestBody Foo foo, ...) {
   ...
}

我尝试通过以下方式对控制器方法进行单元测试

// Arrange
    Foo foo = null;
    String requestBody = objectMapper.writeValueAsString(foo);

    // Act + assert
    mockMvc
    .perform(
    post("/end_point")
    .contentType("application/json")
    .content(requestBody))
    .andExpect(status().isBadRequest());

我期望由@ControllerAdvice处理此MethodArgumentNotValidException异常,但是执行单元测试时出现HttpMessageNotReadableException。 我的问题:

  1. 是否有必要测试请求正文是否为空?
  2. 如果1.为true,那么如何通过Bean验证来完成?

0 个答案:

没有答案