@RequestBody不限于POJO类型和BindingResult hasErrors始终为假

问题描述:

我在开发早期并未遇到此问题,但只是注意到调试另一个问题时发生了这种情况。这发生在所有的REST端点,但下面是一个例子:@RequestBody不限于POJO类型和BindingResult hasErrors始终为假

@RestController 
@RequestMapping("/editlisting") 
public class EditParkingSpaceListingController { 
@Autowired 
ParkingSpaceRepository parkingSpaceRepository; 
@Autowired 
ParkingSpaceListingRepository parkingSpaceListingRepository; 

@RequestMapping(method = RequestMethod.PUT) 
public ResponseEntity<String> editParking(@RequestBody ParkingSpaceListingClient pslc, BindingResult result) { 
    if (result.hasErrors()) { 
     return new ResponseEntity<String>("", HttpStatus.BAD_REQUEST); 
    } 
// Code to save pslc data to database. 

现在,如果我用身体发送一个HTTP请求作为

{ } 

我得到一个200响应,并当我检查的MongoDB,该集合中有一个新的空文档。如果我发送一个没有方括号的空主体,如预期的那样它将返回400.如果我发送的POJO中不存在随机垃圾数据的主体,BindingResult似乎没有拾取错误,并且新的空白文档仍然存在创建。

+0

如预期的那样,它会返回400个弹簧启动1.4.1,项目中确切的弹簧启动版本是什么? –

您需要按照以下步骤输入文档验证:

(1)添加javax.validation包约束(如@NotNull@Size,等..)你ParkingSpaceListingClient bean类。

(2)将@Validated annotation添加到您的控制器方法中,以将验证错误捕获到BindingResult对象中。

有关输入验证的更多详细信息,您可以查看here