@RequestBody不限制POJO类型,BindingResult hasErrors总是false

时间:2016-11-07 00:10:41

标签: spring-boot

我没有在开发早期遇到这个问题,但只是注意到在调试另一个问题时发生了这种情况。这发生在所有REST端点上,但下面是一个示例:

@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 个答案:

答案 0 :(得分:0)

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

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

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

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