2016-08-16 36 views
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,但我認爲這不是個好主意。

請幫助,我應該在此示例中做的就是在客戶端驗證錯誤信息。

回答

0

400錯誤的請求意味着你的要求不匹配PeopleDTO對象。因此請確保您的請求包含PeopleDTO中的所有必需屬性。

+0

好的,謝謝。 但是我怎麼能在客戶端得到類似「400」的錯誤請求,僅僅是因爲'不允許名稱'「? –