Spring RESTとAngularJSを使用してサーバー側のSpring検証を使用して簡単なテストアプリケーションを作成しようとしています。 RESTコントローラで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());
}
}
そしてバリ:AngularJSのサービスとコントローラで
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");
}
}
}
とコード:
//...
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
}
);
//...
[OK]を、バリデータが正常に動作します。私はPeopleValitatorに入って、 "Disallowed name"というメッセージでエラーを受け取ります。
クライアント側のコードでは、レスポンス(jsコードのres値)は、メッセージ「HTTP ERROR 400」を含むHTMLのように見え、特定のエラーについては何も表示されません。
経験豊かな人、たとえばhereは、特定のエラー情報を含むJSONのような応答ですが、私はこのような動作をすることはできません。
また、ここではBindingResultをRESTメソッドのパラメータとして使用することもできますが、それはうまく動作しますが、それは最良の方法ではないと思います。
このサンプルで、クライアント側で検証エラー情報を取得するにはどうすればよいですか。
ありがとうございます。 しかし、私は "400のような何かのクライアント側に乗ることができます。 –