史上最简单 springboot @Body Bean 整合 validation 入参校验框架 统一结果返回 异常处理(优雅)

本文介绍了如何在SpringBoot中利用@Validated进行Bean的参数校验,通过自定义注解和分组接口实现精细化验证。同时,提供了统一的异常处理和结果返回方式,确保了API的优雅性和一致性。详细步骤包括添加依赖、编写controller、自定义注解、Model使用以及测试用例。
摘要由CSDN通过智能技术生成

话不多说,直接上代码,优雅就完事儿了

一、依赖:

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.1.Final</version>
</dependency>

二、代码:

1、controller 代码:

在入参 Bean 前添加此注解 @Validated

import com.pph.model.request.ValidatedDemoReq;
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.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author pph
 * @date 2020/5/12 17:45
 * @description
 */
@RestController
@RequestMapping("/validation")
public class ValidationTestController {

    /**
     * Bean 入参校验框架测试
     *
     * @param req 入参
     * @return 结果
     */
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public Object test(@RequestBody @Validated ValidatedDemoReq req) {
        return req.toString();
    }

    /**
     * Bean 入参校验框架测试(分组)
     *
     * @param req 入参
     * @return 结果
     */
    @RequestMapping(value = "/test/group", method = RequestMethod.GET)
    public Object test(@RequestBody @Validated(value = GroupTest.class) ValidatedDemoReq req) {
        return req.toString();
    }
}

2、自定义注解:

实现 ConstraintValidator 接口并引用到注解中

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

import static java.util.stream.Collectors.toList;

/**
 * @author pph
 * @date 2020/5/12 13:57
 * @description 校验只能为指定的某些值
 */
@Documented
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = Contains.ContainsValidator.class)
public @interface Contains {

    String message() default "必须传入 contains 指定其中的某个值"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值