spring-boot整合validate

本文详细介绍了如何在Spring Boot项目中整合Hibernate Validate进行后端数据验证,包括在Controller中进行验证、国际化、分组校验、自定义校验规则以及全局异常拦截器的使用。还列举了常用的校验注解及其作用。
摘要由CSDN通过智能技术生成

spring-boot整合validate

在Contrller中进行验证

创建spring-boot整合validate工程,在Controller中验证形参

springboot版本是2.0.0.RELEASE已经内置hibernate validate好的,隶属于jsr303规范

官网:(以官网为准)

http://hibernate.org/validator/

api doc

https://docs.jboss.org/hibernate/stable/validator/api/

创建工程,添加依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
</dependency>

spring-boot-starter-web已将依赖添加了

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
</dependency>

测试在不进行验证时候的返回值

编写Controler代码

@RestController
@RequestMapping("validate")
@Slf4j
public class ValidateController {
  @RequestMapping("validate")
  public String validateTest(String address) {
    log.info("address={}", address);
    return "success";
  }
}

访问http://localhost:8080/validate/validate返回如下

{
  "timestamp": "2019-11-20T08:06:15.728+0000",
  "status": 400,
  "error": "Bad Request",
  "message": "Required String parameter 'address' is not present",
  "path": "/user/validate"
}

访问http://localhost:8080/validate/validate?address返回success

测试在进行进行验证的时候的返回值

请求方法中的请求参数上直接添加验证规则 如:@NotNull ,需要在该类上面需要添加@Validated

import org.hibernate.validator.constraints.NotBlank;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.extern.slf4j.Slf4j;

@RestController
@RequestMapping("validate")
@Slf4j
@Validated
public class ValidateController {
  @RequestMapping("validate")
  public String validateTest(@NotBlank(message = "地址不能为空!") String address) {
    log.info("address={}", address);
    return "success";
  }
}

再次访问http://localhost:8080/validate/validate?address如下.成功的进行了验证

{
  "timestamp": "2019-11-20T08:13:53.382+0000",
  "status": 500,
  "error": "Internal Server Error",
  "message": "validateTest.address: 地址不能为空!",
  "path": "/user/validate"
}

验证实体类

编写一个实体类,@Past验证生日字段

import java.util.Date;
import javax.validation.constraints.Past;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

@Data
public class User {
  private String name;
  @Past(message = "生日必须是一个过去的日期")
  @JsonFormat(pattern = "yyyy/MM/dd", timezone = "GMT+8")
  @DateTimeFormat(pattern = "yyyy/MM/dd")
  private Date birthday;
}

 

在Controller中进行验证

Contrller的类上添加@Validated,方法的形参的实体类上添加@Valid注解,后面紧跟着BindingResult result(必须强制性的),校验的结果放在了result中。

import javax.validation.Valid;

import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.biillrobot.study.spring.validte.dataobject.User;

import lombok.extern.slf4j.Slf4j;

@RestController
@RequestMapping("user")
@Slf4j
@Validated
public class UserController {
  @RequestMapping("add")
  public String add(@Valid User user, BindingResult result) {
    log.info("user={}", user);
    return "success";
  }
}

测试访问

http://localhost:8080/user/add?name=l

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值