valid参数校验

valid参数校验

1.引入相关依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.配置全局异常处理

@ControllerAdvice
@RestControllerAdvice
@Slf4j
public class ValidExceptionHandler extends GlobalExceptionHandler {

    // GET请求参数异常处理
    @ExceptionHandler(value = ConstraintViolationException.class)
    public Result<Object> constraintViolationExceptionHandler(ConstraintViolationException e) {
        StringBuilder msg = new StringBuilder();
        Set<ConstraintViolation<?>> constraintViolations = e.getConstraintViolations();
        for (ConstraintViolation<?> constraintViolation : constraintViolations) {
            String message = constraintViolation.getMessage();
            msg.append(message).append(";");
        }
        return ResultResponse.getFailResult(ResultCode.BODY_NOT_MATCH.getResultCode(), msg.toString());
    }

    @ExceptionHandler(ArithmeticException.class)
    public Result<Object> arithmeticExceptionHandler(ArithmeticException e) {
        e.printStackTrace();
        return ResultResponse.getFailResult(ResultCode.NOT_FOUND.getResultCode(), "算术异常!"+e.getMessage());
    }

    // POST请求参数异常处理
    @ExceptionHandler(BindException.class)
    public Result<Object> bindExceptionHandler(BindException e) {
        FieldError fieldError = e.getBindingResult().getFieldError();
        String msg;
        if (Objects.isNull(fieldError)) {
            msg = "POST请求参数异常:" + JSON.toJSONString(e.getBindingResult());
            log.info(msg);
        } else {
            msg = fieldError.getDefaultMessage();
        }
        return ResultResponse.getFailResult(ResultCode.BODY_NOT_MATCH.getResultCode(), msg);
    }

}

3.GET请求参数校验

@RestController
@RequestMapping(value = "/test")
@Slf4j
//@ApiIgnore
@Validated
public class TestController {

    @GetMapping(value = "/test")
    public Result<Object> test(@NotNull(message = "name必传")
                                   @NotBlank(message = "name格式错误")String name) {
        return ResultResponse.getSuccessResult("hello: " + name);
    }

}

请求示例1:

请求示例2:
在这里插入图片描述

4.POST请求参数校验

@RestController
@RequestMapping(value = "/test")
@Slf4j
@Validated
@ApiIgnore
public class TestController {
    
    @PostMapping(value = "/test1")
    public Result<Object> test1 (@Valid @RequestBody UserRequest user) {
        return ResultResponse.getSuccessResult(user);
    }

}
@Data
public class UserRequest implements Serializable {

    @NotNull(message = "userId必传")
    @Min(value = 1, message = "userId格式错误")
    private Long userId;

    @NotNull(message = "name必传")
    @NotBlank(message = "name格式错误")
    private String name;

    @Valid
    @NotEmpty(message = "至少传一个girlFriend")
    private List<UserRequest> girlFriends;

}

请求示例1:
在这里插入图片描述

请求示例2:
在这里插入图片描述

请求示例3:
在这里插入图片描述

5.相关注解

注解解释
@Null限制只能为null
@NotNull限制必须不为null
@AssertFalse限制必须为false
@AssertTrue限制必须为true
@DecimalMax(value)限制必须为一个不大于指定值的数字
@DecimalMin(value)限制必须为一个不小于指定值的数字
@Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future限制必须是一个将来的日期
@Past限制必须是一个过去的日期
@Max(value)限制必须为一个不大于指定值的数字
@Min(value)限制必须为一个不小于指定值的数字
@Pattern(value)限制必须符合指定的正则表达式
@Size(max,min)限制字符长度必须在min到max之间
@NotEmpty验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty
@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
A:好的,下面是一个使用springboot、mybatis、swagger2、valid参数校验、图片上传、异常统一处理、返回体封装、vue构建相册项目的CRUD接口实现的代码示例。 1. 定义实体类 ```java public class Album { private Long id; @NotBlank(message = "相册名称不能为空") private String name; @NotBlank(message = "相册描述不能为空") private String description; private String coverUrl; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date updateTime; // getter和setter省略... } ``` 2. 定义Mapper接口 ```java @Mapper public interface AlbumMapper { List<Album> findAll(); Album findById(Long id); int insert(Album album); int update(Album album); int deleteById(Long id); } ``` 3. 定义Service接口及实现类 ```java public interface AlbumService { List<Album> findAll(); Album findById(Long id); void save(Album album); void update(Album album); void deleteById(Long id); } @Service public class AlbumServiceImpl implements AlbumService { @Autowired private AlbumMapper albumMapper; @Override public List<Album> findAll() { return albumMapper.findAll(); } @Override public Album findById(Long id) { return albumMapper.findById(id); } @Override public void save(@Valid Album album) { album.setCreateTime(new Date()); album.setUpdateTime(new Date()); albumMapper.insert(album); } @Override public void update(@Valid Album album) { album.setUpdateTime(new Date()); albumMapper.update(album); } @Override public void deleteById(Long id) { albumMapper.deleteById(id); } } ``` 4. 定义Controller接口 ```java @RestController @RequestMapping("/album") @Api(tags = "相册管理接口") public class AlbumController { @Autowired private AlbumService albumService; @GetMapping("/") @ApiOperation("查询所有相册") public Result findAll() { List<Album> albumList = albumService.findAll(); return Result.success(albumList); } @GetMapping("/{id}") @ApiOperation("查询相册详情") public Result findById(@PathVariable Long id) { Album album = albumService.findById(id); if (album != null) { return Result.success(album); } else { return Result.error(ResultCode.NOT_FOUND); } } @PostMapping("/") @ApiOperation("添加相册") public Result save(@Valid @RequestBody Album album) { albumService.save(album); return Result.success(); } @PutMapping("/{id}") @ApiOperation("更新相册") public Result update(@PathVariable Long id, @Valid @RequestBody Album album) { Album old = albumService.findById(id); if (old != null) { album.setId(id); albumService.update(album); return Result.success(); } else { return Result.error(ResultCode.NOT_FOUND); } } @DeleteMapping("/{id}") @ApiOperation("删除相册") public Result deleteById(@PathVariable Long id) { Album album = albumService.findById(id); if (album != null) { albumService.deleteById(id); return Result.success(); } else { return Result.error(ResultCode.NOT_FOUND); } } } ``` 5. 定义全局异常处理器 ```java @ControllerAdvice @ResponseBody public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { FieldError fieldError = e.getBindingResult().getFieldError(); String message = fieldError.getDefaultMessage(); return Result.error(ResultCode.INVALID_PARAMETER, message); } // other exception handler... } ``` 6. 完成以上步骤后,启动SpringBoot应用程序,然后使用SwaggerUI测试接口。同时,在前端项目中可以使用Vue框架实现前端展示及交互。 以上就是使用springboot、mybatis、swagger2、valid参数校验、图片上传、异常统一处理、返回体封装、vue构建相册项目的CRUD接口实现的一个简单示例,仅供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

难过的风景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值