我有一个休息控制器:
@RestController
public abstract class CrudController {
@RequestMapping(
path = "delete",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON,
consumes = MediaType.APPLICATION_JSON)
public ResponseEntity<ResponseDTO<Void>> delete(
@RequestBody IdDTO request,
@RequestHeader("X-auth-token") String token,
BindingResult bindingResult
) {
//delete logic
}
@RequestMapping(
path = "read",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON,
consumes = MediaType.APPLICATION_JSON)
public ResponseEntity<ResponseDTO<DTO>> read(
@RequestBody IdDTO<User> request,
@RequestHeader("X-auth-token") String token,
BindingResult bindingResult
) {
//read logic
}
}
我想添加Spring Validation。很明显,对于read方法和delete方法应该是不同的验证器。我想知道可以将两个@InitBinder用于读取而另一个用于删除吗?
答案 0 :(得分:1)
我认为您对BindingResult的使用不太熟悉。它用于从请求到Java对象的绑定对象的过程。 它搜索类验证器,或使用类&#39;上使用的验证注释。领域。要绑定的对象需要使用@Valid进行注释。
例如:
@PostMapping
public ResponseEntity<Note> addNote(@Valid Note note, BindingResult result) {
if(result.hasErrors())
return ResponseEntity.badRequest().build();
noteService.save(note);
return ResponseEntity.ok(noteService.getNoteById(note.getId()));
}
您尝试做的是验证某些内容,但不能完全绑定它。
我还建议在同一路径中使用不同的http方法进行删除和读取(GET),而不是在不同的路径中使用POST方法。