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