2016-08-16 19 views
1

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メソッドのパラメータとして使用することもできますが、それはうまく動作しますが、それは最良の方法ではないと思います。

このサンプルで、クライアント側で検証エラー情報を取得するにはどうすればよいですか。

答えて

0

400不良リクエストは、リクエストがPeopleDTOオブジェクトと一致しないことを意味します。したがって、要求にPeo​​pleDTOのすべての必須属性が含まれていることを確認してください。

+0

ありがとうございます。 しかし、私は "400のような何かのクライアント側に乗ることができます。 –