激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - Java教程 - 詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

2021-08-09 11:09奮斗的小方 Java教程

這篇文章主要介紹了詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、首先創(chuàng)建一個(gè)測試實(shí)體類Person,并攜帶如上注解,其注解的作用描述在message

  1. package com.clickpaas.pojo;
  2.  
  3. import com.fasterxml.jackson.annotation.JsonFormat;
  4. import lombok.Data;
  5. import org.hibernate.validator.constraints.Length;
  6. import org.hibernate.validator.constraints.Range;
  7.  
  8. import javax.validation.constraints.*;
  9. import java.math.BigDecimal;
  10. import java.util.Date;
  11. import java.util.List;
  12.  
  13. /**
  14. * @author 方延杰
  15. * @version 1.0
  16. * @since 2020/12/10 9:04 下午
  17. */
  18. @Data
  19. public class Person {
  20.  
  21. @Null(message = "death必須為null")
  22. private String death;
  23.  
  24. @AssertTrue(message = "bool必須為true")
  25. private boolean bool;
  26.  
  27. @AssertFalse(message = "fal必須為false")
  28. private boolean fal;
  29.  
  30. @Min(value = 1, message = "min必須為數(shù)字,其值大于或等于指定的最小值")
  31. private Integer min;
  32.  
  33. @Max(value = 10, message = "max必須為數(shù)字,其值小于或等于指定的最大值")
  34. private Integer max;
  35.  
  36. @DecimalMin(value = "1", message = "minDeci最小不能小于1")
  37. private BigDecimal minDeci;
  38.  
  39. @DecimalMax(value = "10", message = "maxDeci最大不能大于10")
  40. private BigDecimal maxDeci;
  41.  
  42. @Size(min = 1, max = 2, message = "list集合的長度最小不能小于1,最大不能大于2")
  43. private List<Object> list;
  44.  
  45. @Digits(integer = 4, fraction = 2, message = "digits整數(shù)位不能超過4個(gè),小數(shù)位不能超過2個(gè)")
  46. private BigDecimal digits;
  47.  
  48. /**
  49. * 將前臺傳來的日期數(shù)據(jù)映射到此字段
  50. */
  51. @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  52. @Past(message = "past必須為過去的日期")
  53. private Date past;
  54.  
  55. @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  56. @Future(message = "future必須為將來的日期")
  57. private Date future;
  58.  
  59. @Pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "phone必須符合正則表達(dá)式")
  60. private String phone;
  61.  
  62. @Email(message = "email必須是郵箱格式")
  63. private String email;
  64.  
  65. @Length(min = 1, max = 2, message = "length長度最小不能小于1,最大不能大于2")
  66. private String length;
  67.  
  68. @NotEmpty(message = "id不能為null,長度大于0")
  69. private String id;
  70.  
  71. @Range(min = 1, max = 12, message = "month最小不能小于1,最大不能大于12")
  72. private Integer month;
  73.  
  74. @NotBlank(message = "name不能為null,字段串長度大于0(限字符串)")
  75. private String name;
  76. }

2、封裝返回響應(yīng)體

  1. package com.clickpaas.response;
  2.  
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5.  
  6. /**
  7. * @author 方延杰
  8. * @version 1.0
  9. * @since 2019/7/3 4:32 下午
  10. */
  11. @Data
  12. @AllArgsConstructor
  13. public class CodeMsg {
  14.  
  15. private int code;
  16.  
  17. private String msg;
  18.  
  19. /**
  20. * 失敗
  21. */
  22. public static CodeMsg SERVER_ERROR = new CodeMsg(500, "服務(wù)端異常");
  23.  
  24. }
  1. package com.clickpaas.response;
  2.  
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5.  
  6. /**
  7. * @author 方延杰
  8. * @version 1.0
  9. * @since 2019/7/3 4:35 下午
  10. */
  11. @Data
  12. @AllArgsConstructor
  13. public class Result<T> {
  14.  
  15. /**
  16. * 返回狀態(tài)碼 除200其余全部失敗
  17. */
  18. private int code;
  19.  
  20. /**
  21. * 返回信息 除success其余全部失敗
  22. */
  23. private String msg;
  24.  
  25. /**
  26. * 泛型數(shù)據(jù)
  27. */
  28. private T data;
  29.  
  30. /**
  31. * 成功時(shí)返回的類型
  32. *
  33. * @param data 數(shù)據(jù)
  34. * @param <T> 泛型
  35. * @return 泛型數(shù)據(jù)
  36. */
  37. public static <T> Result<T> success(T data) {
  38. return new Result<>(200, "success", data);
  39. }
  40.  
  41. public static <T> Result<T> fail(CodeMsg codeMsg) {
  42. return new Result<>(codeMsg);
  43. }
  44. private Result(CodeMsg codeMsg) {
  45. if (codeMsg == null) {
  46. return;
  47. }
  48. this.code = codeMsg.getCode();
  49. this.msg = codeMsg.getMsg();
  50. }
  51.  
  52. }

3、創(chuàng)建使用增強(qiáng)器攔截并返回異常信息

  1. package com.clickpaas.config;
  2.  
  3. import com.clickpaas.response.CodeMsg;
  4. import com.clickpaas.response.Result;
  5. import org.springframework.web.bind.MethodArgumentNotValidException;
  6. import org.springframework.web.bind.annotation.ExceptionHandler;
  7. import org.springframework.web.bind.annotation.RestControllerAdvice;
  8.  
  9. import javax.servlet.http.HttpServletRequest;
  10. import java.util.Objects;
  11.  
  12. /**
  13. * @author 方延杰
  14. * @version 1.0
  15. * @since 2018/12/10 4:59 下午
  16. */
  17. @RestControllerAdvice
  18. public class GlobalExceptionInterceptor {
  19.  
  20. @ExceptionHandler(value = MethodArgumentNotValidException.class)
  21. public Result<Object> exceptionHandler(HttpServletRequest request, Exception e) {
  22. String errMsg = "處理失敗";
  23. if (e instanceof MethodArgumentNotValidException) {
  24. // 拿到參數(shù)校驗(yàn)具體異常信息
  25. errMsg = Objects.requireNonNull(((MethodArgumentNotValidException) e).getBindingResult().getFieldError()).getDefaultMessage();
  26. }
  27. return Result.fail(new CodeMsg(500, errMsg));
  28. }
  29. }

4、創(chuàng)建控制層測試

  1. package com.clickpaas.controller;
  2.  
  3. import com.clickpaas.pojo.Person;
  4. import org.springframework.validation.annotation.Validated;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RequestBody;
  7. import org.springframework.web.bind.annotation.RestController;
  8.  
  9. /**
  10. * @author 方延杰
  11. * @version 1.0
  12. * @since 2020/12/10 9:03 下午
  13. */
  14. @RestController
  15. public class ValidController {
  16.  
  17. @PostMapping("/valid")
  18. public String valid(@Validated @RequestBody Person person) {
  19. return "success";
  20. }
  21.  
  22. }

5、測試符合驗(yàn)證請求體訪問,請求體如下:

  1. {
  2. "death":null,
  3. "bool":true,
  4. "fal":false,
  5. "min":1,
  6. "max":10,
  7. "minDeci":1,
  8. "maxDeci":10,
  9. "list":[
  10. {},{}
  11. ],
  12. "digits":1144.12,
  13. "past":"2020-10-01 10:00:00",
  14. "future":"2022-10-01 10:00:00",
  15. "phone":"15900445584",
  16. "email":"[email protected]",
  17. "length":"ab",
  18. "id":" ",
  19. "name":"a"
  20. }

詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

6、故意修改不符合驗(yàn)證的數(shù)據(jù)

詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

7、如果想做整體驗(yàn)證,如下:

  1. package com.clickpaas.uitl;
  2.  
  3. import javax.validation.ConstraintViolation;
  4. import javax.validation.Validation;
  5. import javax.validation.Validator;
  6. import java.util.List;
  7. import java.util.Set;
  8. import java.util.stream.Collectors;
  9.  
  10. /**
  11. * Bean整體校驗(yàn)工具類
  12. *
  13. * @author 方延杰
  14. * @version 1.0
  15. * @since 2020/12/10 10:08 下午
  16. */
  17. public class ValidatorUtils {
  18.  
  19. private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator();
  20.  
  21. /**
  22. * Bean整體校驗(yàn),有不合規(guī)范,拼接message
  23. */
  24. public static String validate(Object obj, Class<?>... groups) {
  25.  
  26. StringBuilder errorMessage = new StringBuilder();
  27.  
  28. Set<ConstraintViolation<Object>> resultSet = VALIDATOR.validate(obj, groups);
  29. if (resultSet.size() > 0) {
  30. //如果存在錯(cuò)誤結(jié)果,則將其解析并進(jìn)行拼湊后異常拋出
  31. List<String> errorMessageList = resultSet.stream().map(ConstraintViolation::getMessage).collect(Collectors.toList());
  32. errorMessageList.forEach(o -> errorMessage.append(o).append(";"));
  33. }
  34. return errorMessage.toString();
  35. }
  36.  
  37. }

8、整體測試類

詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

到此這篇關(guān)于詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性的文章就介紹到這了,更多相關(guān)Java 驗(yàn)證參數(shù)合法性內(nèi)容請搜索我們以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/weixin_48314739/article/details/111012090

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久精品视频国产 | 国产在线观看免费视频软件 | 成人电影毛片 | 久久久久久麻豆 | 护士xxxx| 成人午夜免费观看 | 久久精品国产99久久久古代 | 免费h片 | 一级毛片大片 | 国产91一区二区三区 | 亚洲欧美日韩精品久久 | 狠狠干网站 | 欧美a级大胆视频 | 成年人免费高清视频 | 一级做受毛片免费大片 | 亚洲自拍第一 | 久久免费视频一区二区三区 | xxxxhd18hd日本hd | 一区二区久久电影 | 黄污免费网站 | xxxxhd86日本护士hd | 日本中文字幕久久 | 91国内精品久久久久免费影院 | 国产精品久久久久影院老司 | 久久国产精品网 | 九九热精品在线 | 国产精品成人一区二区三区电影毛片 | 国产一区亚洲 | 欧洲成人综合网 | 美女视频在线观看黄 | 性生活视频一级 | 97久久日一线二线三线 | 法国极品成人h版 | 99久久久精品国产一区二区 | 国产精品久久久乱弄 | 国产精品久久久久免费视频 | www国产成人免费观看视频 | 久久免费综合视频 | 久久久久久久久久久亚洲 | 中文字幕一区2区 | 成人一级免费 |