欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用@RequestBody配合@Valid校驗(yàn)入?yún)?shù)

 更新時(shí)間:2022年03月15日 09:41:07   作者:擊水三千里  
這篇文章主要介紹了使用@RequestBody配合@Valid校驗(yàn)入?yún)?shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@RequestBody配合@Valid校驗(yàn)入?yún)?shù)

自定義一個(gè)Controller

import com.example.demo.pojo.User;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;?
import javax.validation.Valid;
/**
?* @Author: luoye
?* @Date: 2018-10-12
?*/
@RestController
public class ValiController {
? ? @PostMapping(value = "/",produces = "application/json;charset=UTF-8")
? ? public User vali(@RequestBody @Valid User user){
? ? ? ? return user;
? ? }
}

自定義實(shí)體類

import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
?
/**
?* @Author: luoye
?* @Date: 2018-10-12
?*/
public class User {
? ? @NotBlank(message = "這個(gè)姓名不能為空")
? ? private String name;
? ? @NotNull(message = "這個(gè)年齡不能為空")
? ? @Max(value = 105,message = "太大了")
? ? private Integer age;
?
? ? public String getName() {
? ? ? ? return name;
? ? }
?
? ? public void setName(String name) {
? ? ? ? this.name = name;
? ? }
?
? ? public Integer getAge() {
? ? ? ? return age;
? ? }
?
? ? public void setAge(Integer age) {
? ? ? ? this.age = age;
? ? }
}

自定義全局異常處理器

import com.example.demo.pojo.ErrorMsg;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
?
import java.util.ArrayList;
import java.util.List;
?
/**
?* @Author luoye
?* @Date: 2018/10/12 16:50
?*/
@ControllerAdvice
public class ExceptionHandlerContrller {?
?
? ? @ExceptionHandler(MethodArgumentNotValidException.class)
? ? @ResponseBody
? ? public List<ErrorMsg> exception(MethodArgumentNotValidException e) {
? ? ? ? BindingResult bindingResult = e.getBindingResult();
? ? ? ? List<ObjectError> allErrors = bindingResult.getAllErrors();
? ? ? ? List<ErrorMsg> errorMsgs = new ArrayList<>();
?
? ? ? ? allErrors.forEach(objectError -> {
? ? ? ? ? ? ErrorMsg errorMsg = new ErrorMsg();
? ? ? ? ? ? FieldError fieldError = (FieldError)objectError;
? ? ? ? ? ? errorMsg.setField(fieldError.getField());
? ? ? ? ? ? errorMsg.setObjectName(fieldError.getObjectName());
? ? ? ? ? ? errorMsg.setMessage(fieldError.getDefaultMessage());
? ? ? ? ? ? errorMsgs.add(errorMsg);
? ? ? ? });
? ? ? ? return errorMsgs;
? ? }
}

PostMan測(cè)試下

[
? ? {
? ? ? ? "field": "name",
? ? ? ? "message": "這個(gè)姓名不能為空",
? ? ? ? "objectName": "user"
? ? },
? ? {
? ? ? ? "field": "age",
? ? ? ? "message": "這個(gè)年齡不能為空",
? ? ? ? "objectName": "user"
? ? }
]

附錄

@Valid 注解類型的使用:

  • @Null:限制只能為null
  • @NotNull:限制必須不為null
  • @AssertFalse:限制必須為false
  • @AssertTrue:限制必須為true
  • @DecimalMax(value):限制必須為一個(gè)不大于指定值的數(shù)字
  • @DecimalMin(value):限制必須為一個(gè)不小于指定值的數(shù)字
  • @Digits(integer,fraction):限制必須為一個(gè)小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction
  • @Future:限制必須是一個(gè)將來的日期
  • @Max(value):限制必須為一個(gè)不大于指定值的數(shù)字
  • @Min(value):限制必須為一個(gè)不小于指定值的數(shù)字
  • @Past:限制必須是一個(gè)過去的日期
  • @Pattern(value):限制必須符合指定的正則表達(dá)式
  • @Size(max,min):限制字符長(zhǎng)度必須在min到max之間
  • @Past:驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
  • @NotEmpty:驗(yàn)證注解的元素值不為null且不為空(字符串長(zhǎng)度不為0、集合大小不為0)
  • @NotBlank:驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長(zhǎng)度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的空格
  • @Email:驗(yàn)證注解的元素值是Email,也可以通過正則表達(dá)式和flag指定自定義的email格式

@Valid校驗(yàn)@RequestBody的參數(shù)

希望通過注解校驗(yàn)post請(qǐng)求的body

需要用到@Valid注解

public String getResponse(@RequestBody @Valid MyRequest request) throws Exception {
	xxx
}

在request實(shí)體類添加注解進(jìn)行校驗(yàn)

例如用@NotNull進(jìn)行判空校驗(yàn)

@Data
public class MyRequest {
    @NotNull(message = "id 不能為空")
    private Integer id;
    @NotNull(message = "name 不能為空")
    private String name;
}

結(jié)合統(tǒng)一異常處理,處理MethodArgumentNotValidException

可以返回注解配置的錯(cuò)誤信息

@ControllerAdvice
@Slf4j
public class ExceptionResolver {
    @ExceptionHandler(value = {Exception.class})
    @ResponseBody
    public String handleOtherExceptions(final Exception ex) {
        if (ex instanceof MethodArgumentNotValidException) {
            // 入?yún)⑿r?yàn)錯(cuò)誤
            StringBuilder msg = new StringBuilder();
            MethodArgumentNotValidException mex = (MethodArgumentNotValidException) ex;
            BindingResult bindingResult = mex.getBindingResult();
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            allErrors.forEach(objectError -> {
                FieldError fieldError = (FieldError) objectError;
                String oneMsg = fieldError.getDefaultMessage();
                msg.append(oneMsg);
                msg.append(";");
            });
            return msg.toString();
        } 
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Servlet之過濾器(Filter)

    詳解Servlet之過濾器(Filter)

    本篇文章主要介紹了Servlet——過濾器(Filter),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Spring Boot啟動(dòng)過程(六)之內(nèi)嵌Tomcat中StandardHost、StandardContext和StandardWrapper的啟動(dòng)教程詳解

    Spring Boot啟動(dòng)過程(六)之內(nèi)嵌Tomcat中StandardHost、StandardContext和Sta

    這篇文章主要介紹了Spring Boot啟動(dòng)過程(六)之內(nèi)嵌Tomcat中StandardHost、StandardContext和StandardWrapper的啟動(dòng)教程詳解,需要的朋友可以參考下
    2017-04-04
  • MyBatisPlus超詳細(xì)分析條件查詢

    MyBatisPlus超詳細(xì)分析條件查詢

    這篇文章主要介紹了MyBatisPlus條件查詢的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Spring Boot 整合mybatis 與 swagger2

    Spring Boot 整合mybatis 與 swagger2

    之前使用springMVC+spring+mybatis,總是被一些繁瑣的xml配置,還經(jīng)常出錯(cuò),下面把以前的一些ssm項(xiàng)目改成了spring boot + mybatis,相對(duì)于來說優(yōu)點(diǎn)太明顯了,具體內(nèi)容詳情大家通過本文學(xué)習(xí)吧
    2017-08-08
  • Java數(shù)據(jù)庫(kù)連接_jdbc-odbc橋連接方式(詳解)

    Java數(shù)據(jù)庫(kù)連接_jdbc-odbc橋連接方式(詳解)

    下面小編就為大家?guī)硪黄狫ava數(shù)據(jù)庫(kù)連接_jdbc-odbc橋連接方式(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • java輸入多個(gè)數(shù)據(jù)(不確定),排序,并求最大值的方法

    java輸入多個(gè)數(shù)據(jù)(不確定),排序,并求最大值的方法

    今天小編就為大家分享一篇java輸入多個(gè)數(shù)據(jù)(不確定),排序,并求最大值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java的JsonObject對(duì)象提取值方法

    java的JsonObject對(duì)象提取值方法

    下面小編就為大家分享一篇java的JsonObject對(duì)象提取值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot和VUE源碼直接整合打包成jar的踩坑記錄

    SpringBoot和VUE源碼直接整合打包成jar的踩坑記錄

    這篇文章主要介紹了SpringBoot和VUE源碼直接整合打包成jar的踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Springboot如何利用攔截器攔截請(qǐng)求信息收集到日志詳解

    Springboot如何利用攔截器攔截請(qǐng)求信息收集到日志詳解

    一些系統(tǒng)經(jīng)常需要關(guān)注用戶請(qǐng)求的具體信息,如用戶信息、請(qǐng)求參數(shù)、響應(yīng)結(jié)果等等,在SpringBoot應(yīng)用中可通過攔截器的方式統(tǒng)一處理,下面這篇文章主要給大家介紹了關(guān)于Springboot如何利用攔截器攔截請(qǐng)求信息收集到日志的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • java網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)介紹

    java網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)介紹

    這篇文章主要介紹了java網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)介紹,涉及OSI分層模型和TCP/IP分層模型的對(duì)應(yīng)關(guān)系、IP地址、端口號(hào)、tcp、udp等相關(guān)內(nèi)容,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-11-11

最新評(píng)論