1.定义统一返回
package com.example.demo.config;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Data
@Getter
@Setter
public class HttpResponse {
private Integer code;
private String message;
private HttpResponse(){
}
public static HttpResponse ok(){
HttpResponse httpResponse = new HttpResponse();
httpResponse.setCode(200);
httpResponse.setMessage("成功");
return httpResponse;
}
public static HttpResponse error(){
HttpResponse httpResponse = new HttpResponse();
httpResponse.setCode(500);
httpResponse.setMessage("失败");
return httpResponse;
}
public static HttpResponse setCodeAndMessage(Integer code,String message){
HttpResponse httpResponse = new HttpResponse();
httpResponse.setCode(code);
httpResponse.setMessage(message);
return httpResponse;
}
}
2.全局异常处理
package com.example.demo.exception;
import com.example.demo.config.HttpResponse;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class BaseExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public HttpResponse handle(MethodArgumentNotValidException e){
FieldError fieldError = e.getBindingResult().getFieldError();
return HttpResponse.setCodeAndMessage(500,fieldError.getDefaultMessage());
}
}
在使用@Valid注解以及其他JSR-303里面的我们需要先导包
3.依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
4.实体类
package com.example.demo.entity;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Data
@Getter
@Setter
@ToString
public class Person {
@NotNull(message = "请输入姓名")
private String name;
@Min(value = 22,message = "最小年龄大于等于22")
@Max(value = 33,message = "最大年龄小于等于33")
private Integer age;
@Email(message = "请输入正确的邮箱格式")
private String email;
}
5.控制层
package com.example.demo.controller;
import com.example.demo.config.HttpResponse;
import com.example.demo.entity.Person;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/person")
public HttpResponse getMo(@Valid @RequestBody Person person){
System.out.println(person);
return HttpResponse.ok();
}
}
使用@Valid注解作用在实体类上
package com.example.demo.controller;
import com.example.demo.config.HttpResponse;
import com.example.demo.entity.Person;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/person")
public HttpResponse getMo(@Valid @RequestBody Person person){
System.out.println(person);
return HttpResponse.ok();
}
}
6.校验某个字段
在全局异常处理中添加捕捉ConstraintViolationException异常
package com.example.demo.exception;
import com.example.demo.config.HttpResponse;
import jakarta.validation.ConstraintViolationException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class BaseExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public HttpResponse handle(MethodArgumentNotValidException e){
FieldError fieldError = e.getBindingResult().getFieldError();
return HttpResponse.setCodeAndMessage(500,fieldError.getDefaultMessage());
}
@ExceptionHandler(ConstraintViolationException.class)
public HttpResponse handle1(ConstraintViolationException e){
return HttpResponse.setCodeAndMessage(500,e.getMessage());
}
}
controller加上@Validated注解
package com.example.demo.controller;
import com.example.demo.config.HttpResponse;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Size;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Validated
public class MyController {
@GetMapping("/my/{id}/{name}")
public HttpResponse myInfo(@Min (value = 1,message = "id大于等于1")@PathVariable("id")Integer id, @Size(min = 5,max = 10,message = "长度在5-10之间") @PathVariable("name")String name){
System.out.println(name);
System.out.println(id);
return HttpResponse.ok();
}
}