无法理解" BindingResult& UriComponentsBuilder#34;

时间:2015-03-26 10:07:08

标签: spring spring-mvc

我在使用Controller文件的这部分时遇到了问题,虽然我进行了谷歌搜索,但我没有找到任何满意的答案,任何人都可以帮我理解这一点。

我想知道使用" BindingResult& UriComponentsBuilder",使用它们的目的是什么。

另外,

  public ResponseEntity<MyDataObject> create(@RequestBody @Valid MyDataObject mdo, BindingResult result, UriComponentsBuilder builder, @ModelAttribute("serviceRequest") ServiceRequest sreq) {
        sreq.addRequestData(mdo);
        ServiceResponse response = ts.add(sreq);
        MyDataObject updtQ = getResultBO(response, MyDataObject.class);
        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(builder.path("/tools/todos/{id}").buildAndExpand(updtQ.getId()).toUri());
        return new ResponseEntity<TodoCDO>(updtQ, headers, HttpStatus.CREATED);
    }

1 个答案:

答案 0 :(得分:1)

BindingResult 通过存储绑定结果来补充 @Valid 注释。这是关键的内容,它在实践中意味着当发出请求时,会发生绑定,即请求参数或请求体的值被转换并绑定到某些java对象的适当属性的过程。如果请求值不能转换为java类型或者它不满足验证约束,则绑定容易出错,例如 @NotNull 。在这种情况下,会发生 BindingError

如果没有公开 BindingResult 你就不知道是否发生绑定错误,也不知道它的细节,响应将是400 bad request并且请求不会进入方法。将BindingResult设置为紧跟用 @Valid 注释的参数后,请求将进入处理程序方法,并且您只需调用{{1}就可以检查是否存在任何绑定错误。并相应地应用你的逻辑。此外,如果您要将 Model 实例添加到参数列表中, BindingResult 对象将添加到模型中并可供您的视图使用,您可以发布适当的消息给用户。

关于 UriComponentsBuilder 的问题,它是一个实用程序类,它提供了一组有助于处理URL的方便方法,例如扩展PATH变量,获取多个URL部分,包含参数,列表继续,但最重要的是它是一个帮助类,它消除了在操作URL时执行普通String操作的痛苦。