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

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

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

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

自定義一個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;
? ? }
}

自定義實體類

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 = "這個姓名不能為空")
? ? private String name;
? ? @NotNull(message = "這個年齡不能為空")
? ? @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": "這個姓名不能為空",
? ? ? ? "objectName": "user"
? ? },
? ? {
? ? ? ? "field": "age",
? ? ? ? "message": "這個年齡不能為空",
? ? ? ? "objectName": "user"
? ? }
]

附錄

@Valid 注解類型的使用:

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

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

希望通過注解校驗post請求的body

需要用到@Valid注解

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

在request實體類添加注解進行校驗

例如用@NotNull進行判空校驗

@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炲e誤
            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();
        } 
    }
}

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

相關(guān)文章

  • 詳解MyBatis 常用寫法

    詳解MyBatis 常用寫法

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

    景洪市| 陆丰市| 依安县| 获嘉县| 钦州市| 营山县| 家居| 天等县| 张家界市| 定南县| 胶州市| 三都| 兴海县| 六安市| 洪雅县| 黄陵县| 通化市| 南宁市| 商南县| 朝阳区| 将乐县| 汝城县| 西安市| 新化县| 宾川县| 剑阁县| 临澧县| 上思县| 磐安县| 新安县| 巩留县| 尼木县| 浦北县| 行唐县| 荃湾区| 伽师县| 阿合奇县| 改则县| 法库县| 广水市| 尉氏县|