java 參數校驗

一 controller 參數校驗

參考:

https://segmentfault.com/a/1190000038401180 (重點推薦)

https://juejin.cn/post/6844903902811275278

1. 當參數中有 org.springframework.validation.Errors 的子類, 例如 BindingResult, 異常不會被拋出。 源碼見: org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor#resolveArgument

2. @Validated 與BindingResult 需要相鄰,否則 變量result 不能接受錯誤信息, 也就是錯誤信息會拋出。

 

代碼示例如下:

import com.alibaba.fastjson.JSON;
import com.ql.common.domain.Result;
import com.ql.service.validation.Item;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 參數校驗
 * 參考文檔: https://blog.csdn.net/qq_27680317/article/details/79970590
 */
@RequestMapping(value = "/item")
@RestController
public class ItemController {
    /**
     * 有BindingResult參數 不拋出異常
     *
     * @param item
     * @param result
     * @return
     */
    @RequestMapping("add")
    public Result<Void> addItem(@Validated @RequestBody Item item, BindingResult result) {
        System.out.println("item  =: " + JSON.toJSONString(item));

        List<FieldError> fieldErrors = result.getFieldErrors();
        List<String> collect = fieldErrors.stream()
                .map(DefaultMessageSourceResolvable::getDefaultMessage)
                .collect(Collectors.toList());
        return Result.successResult(null, "addItem over collect = :" + JSON.toJSONString(collect));
    }


    /**
     * 正常參數異常校驗, 拋出異常, 統一異常處理
     *
     * @param item
     * @return
     */
    @RequestMapping("add2")
    public Result<Void> addItem2(@Validated @RequestBody Item item) {
        return Result.successResult(null, "addItem2 over");
    }
}

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章