[英]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.