InitBinder方法

时间:2017-09-19 15:40:45

标签: java spring validation

我有一个休息控制器:

@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用于读取而另一个用于删除吗?

1 个答案:

答案 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方法。