@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似乎没有拾取错误,并且新的空白文档仍然存在创建。
答
您需要按照以下步骤输入文档验证:
(1)添加javax.validation
包约束(如@NotNull
,@Size
,等..)你ParkingSpaceListingClient
bean类。
(2)将@Validated annotation
添加到您的控制器方法中,以将验证错误捕获到BindingResult
对象中。
有关输入验证的更多详细信息,您可以查看here。
如预期的那样,它会返回400个弹簧启动1.4.1,项目中确切的弹簧启动版本是什么? –