1
試圖使用Spring REST和AngularJS使用服務器端Spring驗證編寫簡單的測試應用程序。Spring REST驗證響應細節
在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。
有經驗的人,例如here,寫它會像JSON一樣的響應,包含特定的錯誤信息,但我不能得到這樣的行爲,也許做錯了什麼。
這裏還可以使用BindingResult在REST方法,它的工作原理paramether,但我認爲這不是個好主意。
請幫助,我應該在此示例中做的就是在客戶端驗證錯誤信息。
好的,謝謝。 但是我怎麼能在客戶端得到類似「400」的錯誤請求,僅僅是因爲'不允許名稱'「? –