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

  

posted @ 2022-09-07 11:08  知行-zhixing  阅读(412)  评论(0编辑  收藏  举报