簡體   English   中英

Spring REST驗證響應詳細信息

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM