码迷,mamicode.com
首页 > 其他好文 > 详细

接收请求参数使用int类型的后果

时间:2021-06-17 16:25:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:接收   stat   div   end   vax   基本数据类型   --   exce   next   

产生场景:
  测试使用全局异常处理类@RestControllerAdvice与数据校验@Validated完成请求参数的数据校验
  
  全局异常处理类:
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value=com.swimming.basic.exception.NotNullException.class)

    @ExceptionHandler(value=javax.validation.ConstraintViolationException.class)
    public R NotNullHandler(ConstraintViolationException e) {
        Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
        Iterator<ConstraintViolation<?>> iterator = violations.iterator();
        StringBuffer message = new StringBuffer("");
        while (iterator.hasNext()) {
            message.append(iterator.next().getMessage());
        }
        return R.error().message(message.toString());
    }
  //...  
}

  Controller类

    @GetMapping("findById")
    public R findById(@NotNull(message = "id不能为空") int id){
        User user = userService.findById(id);
        return R.ok().data("user", user);
    }

  此时如果请求时没有携带参数:id,不会产生ConstraintViolationException异常,而是:

    java.lang.IllegalStateException: Optional int parameter ‘id‘ is present but cannot be translated into a null value due to being declared as a primitive type
      id 为 int型数据,不能由一个null值转换
  
  解决:
    在springmvc接收请求参数时,尽量不要使用基本数据类型去接收(使用对应的包装类),否则会出现类似错误---此时使用@Validated是无法捕获的

接收请求参数使用int类型的后果

标签:接收   stat   div   end   vax   基本数据类型   --   exce   next   

原文地址:https://www.cnblogs.com/pikachu511/p/14890176.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!