校验json格式_SpringBoot数据校验(普通校验、分组校验)

作者:吴声子夜歌

原文链接:https://blog.csdn.net/cold___play/article/details/104209719

普通校验

普通检验是基础用法,非常容易,首先需要用户在SpringBootWeb项目中添加数据校验相关的依赖:

                org.springframework.boot            spring-boot-starter-validation        

查看LocalValidatorFactoryBean类的源码,发现默认的ValidationMessageSource(校验出错时的提示文件) 是resources目录下的ValidationMessages.properties 文件,因此在resources目录下创建ValidationMessages.properties文件,内容如下:

user.name.size=用户名长度介于5到10个字符之间user.address.notnull=用户地址不能为空user.age.size=年龄输入不正确user.email.notnull=邮箱不能为空user.email.pattern=邮箱格式不正确

创建User类,配置数据校验:

public class User {    private Integer id;    @Size(min = 5, max = 10, message = "{user.name.size}")    private String name;    @NotNull(message = "{user.address.notnull}")    private String address;    @DecimalMin(value = "1", message = "{user.age.size}")    @DecimalMax(value = "200", message = "{user.age.size}")    private Integer age;    @Email(message = "{user.email.pattern}")    @NotNull(message = "{user.email.notnull}")    private String email;    //省略getter和setter}
  • @Size表示一个字符串的长度或者一个集合的大小,必须在某一个范围中;min参数表示范围的下限;max参数表示范围的上限;message表示校验失败时的提示信息。

  • @NotNull注解表示该字段不能为空

  • @DecimalMin注解表示对应属性值的下限

  • @DecimalMax注解表示对应属性值的上限

  • @Email注解表示对应属性格式是一个Email

创建UserController:

@RestControllerpublic class UserController {    @PostMapping("/user")    public List addUser(@Validated User user, BindingResult result){        List errors = new ArrayList<>();        if(result.hasErrors()){            List allErrors = result.getAllErrors();            for(ObjectError error : allErrors){                errors.add(error.getDefaultMessage());            }        }        return errors;    }}
  • 给User参数添加@Validated注解,表示需要对该参数做校验,紧接着的BindingResult参数表示在校验出错时保存的出错信息。

  • 如果BindingResult中的haiErrors方法返回true,表示有错误信息,此时遍历错误信息,将之返回给前端

使用Postman测试:

直接访问"/user"接口:

b060b182dbee32ffa0dbd88c0c021bd5.png

传入用户地址、一个非法邮箱地址以及一个格式不正确的用户名:

68def887f44af896e5a623abf3e40a24.png

分组校验

有的时候,开发者在某一个实体类中定义了很多校验规则,但是在某一次业务处理中,并不需要这么多校验规则,此时就可以使用分组校验:

首先创建两个分组接口:

public interface ValidationGroup1 {}public interface ValidationGroup2 {}

在实体类中添加分组信息:

public class User {    private Integer id;  //groups属性,表示该校验属性规则所属的分组    @Size(min = 5, max = 10, message = "{user.name.size}", groups = ValidationGroup1.class)    private String name;    @NotNull(message = "{user.address.notnull}", groups = ValidationGroup2.class)    private String address;    @DecimalMin(value = "1", message = "{user.age.size}")    @DecimalMax(value = "200", message = "{user.age.size}")    private Integer age;    @Email(message = "{user.email.pattern}")    @NotNull(message = "{user.email.notnull}", groups = {ValidationGroup1.class, ValidationGroup2.class})    private String email;}

在@Validated注解中指定校验分组:

@RestControllerpublic class UserController {    //@Validated(ValidationGroup2.class) 表示这里的校验使用ValidationGroup2分组的校验规则,即只校验邮箱地址是否为空、用户地址是否为空    @PostMapping("/user")    public List addUser(@Validated(ValidationGroup2.class) User user, BindingResult result){        List errors = new ArrayList<>();        if(result.hasErrors()){            List allErrors = result.getAllErrors();            for(ObjectError error : allErrors){                errors.add(error.getDefaultMessage());            }        }        return errors;    }}

测试:

cc1fe1a1f3d431f9eba9ad845e159689.png

2a32180a483bc86c6b7dfe44a293f1bc.gif

Java8 的 Stream API 的确牛X,但性能究竟如何呢?一个接口查询关联了十几张表,响应速度太慢?那就提前把它们整合到一起请不要在 JDK 7+ 中使用这个 JSON 包了优秀!高级Java都这样优雅处理空值还在担心写的一手烂SQL,送你4款工具

推荐关注:Java老鸟Python学习日记

8f9d22dbb76b5ea946fc7105e3e5e3b0.png

代码之外,亦是人生,从事区块链、java、大数据开发工程师的后花园笔记。记录学习python的每一步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种面向对象的编程语言,目前在应用程序开发中被广泛使用。校验JSON格式是Java中一项非常重要的任务,在开发中经常需要对JSON数据进行格式验证。JSON是JavaScript对象表示法的缩写,它是一种轻量级的数据交换格式。 在Java中,我们可以使用标准的JSON库来校验JSON格式。例如,可以使用Jackson、Gson或JSON-lib等库来解析JSON数据并验证其格式是否正确。这些库都提供了丰富的API来校验JSON格式,并且易于使用。 下面是使用Jackson库进行JSON格式校验的示例代码: ```java import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.exc.MismatchedInputException; public class JsonValidator { private static ObjectMapper objectMapper = new ObjectMapper(); public static boolean isValidJson(String jsonStr) { try { JsonNode jsonNode = objectMapper.readTree(jsonStr); return true; } catch (MismatchedInputException e) { return false; } catch (Exception e) { return false; } } } ``` 该代码会将JSON字符串传入isValidJson()方法中,使用Jackson库的readTree()方法来解析JSON数据,并返回解析结果。如果解析失败,则说明JSON格式不正确,方法会返回false。如果解析成功,则说明JSON格式正确,方法返回true。 使用上述代码可以轻松地校验JSON格式。当然,也可以在需要的情况下进行定制化的校验,例如校验JSON键名、键值类型等,以适应各种业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值