繁体   English   中英

Spring REST验证响应详细信息

[英]Spring REST validation response details

尝试使用Spring REST和AngularJS使用服务器端Spring验证编写简单的测试应用程序。

在REST控制器中写了这样的代码:

    @RestController
    @RequestMapping("/people")
    public class PeopleResource {

    //...

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(new PeopleValidator());
    }

    @RequestMapping(method = RequestMethod.POST)
    @Transactional
    @ResponseBody
    public ResultDTO add(@Valid @RequestBody PeopleDTO peopleDTO) {
    // ...
    // some code to save to database
    // ...
        return new ResultDTO(id.toString());
   }
}

验证者:

public class PeopleValidator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
        return PeopleDTO.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors e) {

        PeopleDTO p = (PeopleDTO) target;

        if (p.getName().toLowerCase().equals("disallowedname")) {
            e.rejectValue("name", "Disallowed name");
        }
    }
}

和AngularJS服务和控制器中的代码:

        //...
        function add(data) {
            return $resource('rs/people', {}, {'add': {method: 'POST'}}).add({}, data);
        }
        //...

        //...
        people.add(newPeople).$promise.then(
            function(){
                $uibModalInstance.close();
            },
            function(res){
                // do something to say there are problems
            }
        );
        //...

好的,验证器工作正常。 我进入PeopleValitator,收到错误消息“不允许的名字”。

在客户端代码中,响应(js代码中的res值)看起来像包含消息“HTTP ERROR 400”的HTML,而不是特定错误。

有经验的人,例如在这里 ,写它会像JSON一样包含特定的错误信息,但我不能得到这样的行为,也许做错了。

这里也可以使用BindingResult作为REST方法中的参数,它可以工作,但我认为这不是最好的主意。

请帮助,我应该在此示例中做些什么来获取客户端的验证错误信息。

400错误请求意味着您的请求与PeopleDTO对象不匹配。 因此,请确保您的请求包含PeopleDTO中的所有必需属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM