springboot 參數(shù)格式校驗(yàn)操作
springboot 參數(shù)格式校驗(yàn)
@Validated
字面意思校驗(yàn)

@RequestBody
該注解不用多說(shuō),意思是接收為json格式的參數(shù)
@Validated
字面意思校驗(yàn), 需要配合@NotBlank 或者 @NotNull 注解才能生效
進(jìn)入到請(qǐng)求體參數(shù)中。

springboot 參數(shù)注解校驗(yàn)
1.添加依賴(lài)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
package com.xl.annotation;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class User {
@NotNull(message = "ID不能為空")
@Range(min = 1, max = 100, message = "ID必須在1到100之間")
private Integer id;
@NotNull(message = "姓名不能為空")
@Length(min = 2, max = 6, message = "姓名必須在2到6位之間")
private String name;
@NotNull(message = "余額不能為空")
@DecimalMax(value = "30.50", message = "余額不能超過(guò)30.5")
@DecimalMin(value = "1.50", message = "余額不能低于1.5")
private BigDecimal amount;
@NotNull(message = "生日不能為空")
@Past(message = "生日必須是過(guò)去")
private Date birthday;
@NotBlank(message = "郵箱不能為空")
@Email(message = "郵箱格式不正確")
private String email;
@NotBlank(message = "手機(jī)號(hào)不能為空")
@Pattern(regexp = "^(((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[6])|(17[0135678])|(18[0-9])|(19[89]))\\d{8})$", message = "手機(jī)號(hào)格式錯(cuò)誤")
private String phone;
}
2.controller層
package com.xl.annotation;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.ValidationException;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
@RestController
@Validated
@Api(value = "手機(jī)驗(yàn)證",description = "手機(jī)驗(yàn)證")
public class MobileController {
@ApiOperation("手機(jī)驗(yàn)證")
@RequestMapping("/phone")
public String mobilePattern( Phone phone){
return "chengg";
}
@PostMapping("/getUser")
@ApiOperation("手機(jī)驗(yàn)證12")
public String getUserStr( @NotNull(message = "name 不能為空")@RequestParam String name,
@Max(value = 99, message = "不能大于99歲")@RequestParam Integer age) {
return "name: " + name + " ,age:" + age;
}
/* @PostMapping("/getUser1")
@ApiOperation("手機(jī)驗(yàn)證c")
public String getUser(@RequestBody @Validated User user, BindingResult bindingResult) {
validData(bindingResult);
return "name: " + user.getName() + " ,age:" + user.getAge();
}*/
private void validData(BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
StringBuffer sb = new StringBuffer();
for (ObjectError error : bindingResult.getAllErrors()) {
sb.append(error.getDefaultMessage());
}
throw new ValidationException(sb.toString());
}
}
@PostMapping("/test")
@ApiOperation(value = "測(cè)試", notes = "")
public String test(@ApiParam(name = "test", value = "參數(shù)", required = true) @Validated @RequestBody User test, BindingResult bindingResult) {
validData(bindingResult);
if(bindingResult.hasErrors()){
String errorMsg = bindingResult.getFieldError().getDefaultMessage();
return errorMsg;
}
return "參數(shù)驗(yàn)證通過(guò)";
}
}
3.自定義一個(gè)拋出異常類(lèi)
package com.xl.annotation;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
import java.util.Set;
/**
* 自定義驗(yàn)證拋出異常
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ValidationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handle(ValidationException exception) {
if(exception instanceof ConstraintViolationException){
ConstraintViolationException exs = (ConstraintViolationException) exception;
Set<ConstraintViolation<?>> violations = exs.getConstraintViolations();
for (ConstraintViolation<?> item : violations) {
//打印驗(yàn)證不通過(guò)的信息
System.out.println(item.getMessage());
}
}
return exception.getMessage();
}
}
4.加一個(gè)當(dāng)檢測(cè)第一個(gè)參數(shù)不合法時(shí)立即返回錯(cuò)誤不會(huì)繼續(xù)進(jìn)行校驗(yàn)
package com.xl.annotation;
import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
@Configuration
public class ValidatorConf {
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure()
.failFast( true )
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Swagger2匹配多個(gè)controller代碼實(shí)例
這篇文章主要介紹了Swagger2匹配多個(gè)controller代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(61)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-08-08
Spring boot集成spring session實(shí)現(xiàn)session共享的方法
這篇文章主要介紹了Spring boot集成spring session實(shí)現(xiàn)session共享的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Java中Random簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本文詳細(xì)給大家介紹了Java中Random簡(jiǎn)介相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06
java swing實(shí)現(xiàn)的掃雷游戲及改進(jìn)版完整示例
這篇文章主要介紹了java swing實(shí)現(xiàn)的掃雷游戲及改進(jìn)版,結(jié)合完整實(shí)例形式對(duì)比分析了java使用swing框架實(shí)現(xiàn)掃雷游戲功能與相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
Java中時(shí)間戳的獲取和轉(zhuǎn)換的示例分析
這篇文章主要介紹了Java中時(shí)間戳的獲取和轉(zhuǎn)換的示例分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
解決Mybatis?plus實(shí)體類(lèi)屬性與表字段不一致的問(wèn)題
這篇文章主要介紹了Mybatis?plus實(shí)體類(lèi)屬性與表字段不一致解決方法,文末給大家提到了Mybatis-plus中數(shù)據(jù)庫(kù)表名和表字段名的相關(guān)知識(shí),需要的朋友可以參考下2022-07-07
Maven管理多模塊應(yīng)用的統(tǒng)一版本號(hào)實(shí)現(xiàn)
本文主要介紹了Maven管理多模塊應(yīng)用的統(tǒng)一版本號(hào)實(shí)現(xiàn),使用versions-maven-plugin插件和占位符結(jié)合flatten-maven-plugin插件來(lái)實(shí)現(xiàn),感興趣的可以了解一下2024-12-12

