一 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"); } }