最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

@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測試下

[
? ? {
? ? ? ? "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):限制字符長度必須在min到max之間
  • @Past:驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
  • @NotEmpty:驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
  • @NotBlank:驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會去除字符串的空格
  • @Email:驗(yàn)證注解的元素值是Email,也可以通過正則表達(dá)式和flag指定自定義的email格式

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

希望通過注解校驗(yàn)post請求的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

可以返回注解配置的錯誤信息

@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)錯誤
            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)文章

  • 詳解MyBatis 常用寫法

    詳解MyBatis 常用寫法

    MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。這篇文章給大家介紹了MyBatis 常用寫法,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • 最新評論

    醴陵市| 龙胜| 满城县| 丰城市| 安图县| 荥经县| 休宁县| 高邑县| 岑溪市| 股票| 清水河县| 高阳县| 呼伦贝尔市| 逊克县| 宁夏| 博野县| 兴国县| 松原市| 清徐县| 天峻县| 杨浦区| 兴义市| 凤庆县| 饶河县| 沐川县| 祁东县| 蓝田县| 岱山县| 大渡口区| 衡山县| 威海市| 镇巴县| 巴楚县| 中宁县| 屏东县| 南华县| 乌拉特前旗| 繁昌县| 阿尔山市| 金阳县| 贡嘎县|