国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - Java教程 - 詳解Java后端優雅驗證參數合法性

詳解Java后端優雅驗證參數合法性

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

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

1、首先創建一個測試實體類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必須為數字,其值大于或等于指定的最小值")
  31. private Integer min;
  32.  
  33. @Max(value = 10, message = "max必須為數字,其值小于或等于指定的最大值")
  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整數位不能超過4個,小數位不能超過2個")
  46. private BigDecimal digits;
  47.  
  48. /**
  49. * 將前臺傳來的日期數據映射到此字段
  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必須符合正則表達式")
  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、封裝返回響應體

  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, "服務端異常");
  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. * 返回狀態碼 除200其余全部失敗
  17. */
  18. private int code;
  19.  
  20. /**
  21. * 返回信息 除success其余全部失敗
  22. */
  23. private String msg;
  24.  
  25. /**
  26. * 泛型數據
  27. */
  28. private T data;
  29.  
  30. /**
  31. * 成功時返回的類型
  32. *
  33. * @param data 數據
  34. * @param <T> 泛型
  35. * @return 泛型數據
  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、創建使用增強器攔截并返回異常信息

  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. // 拿到參數校驗具體異常信息
  25. errMsg = Objects.requireNonNull(((MethodArgumentNotValidException) e).getBindingResult().getFieldError()).getDefaultMessage();
  26. }
  27. return Result.fail(new CodeMsg(500, errMsg));
  28. }
  29. }

4、創建控制層測試

  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、測試符合驗證請求體訪問,請求體如下:

  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":"yanjie.fang@clickpaas.com",
  17. "length":"ab",
  18. "id":" ",
  19. "name":"a"
  20. }

詳解Java后端優雅驗證參數合法性

6、故意修改不符合驗證的數據

詳解Java后端優雅驗證參數合法性

7、如果想做整體驗證,如下:

  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整體校驗工具類
  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整體校驗,有不合規范,拼接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. //如果存在錯誤結果,則將其解析并進行拼湊后異常拋出
  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后端優雅驗證參數合法性

到此這篇關于詳解Java后端優雅驗證參數合法性的文章就介紹到這了,更多相關Java 驗證參數合法性內容請搜索我們以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 羞羞av | 久久99精品久久久久 | 日韩在线观看中文字幕 | 亚洲 欧美 精品 | 色吊丝在线永久观看最新版本 | av7777| 中文字幕精品一区二区精品 | 久久午夜影院 | 久久天天躁狠狠躁夜夜免费观看 | 国产精品欧美一区二区三区不卡 | 亚洲国产精品视频 | 日韩精品一区二区在线观看 | 国产免费一区二区 | 在线成人免费 | 国产免费自拍 | 青青av| 久久久久久久国产精品免费播放 | 精品久久久久久久久久久久久久久久久久 | 这里只有精品视频 | 九九热1 | 亚洲免费人成在线视频观看 | 国产乱码精品1区2区3区 | 激情五月综合 | 久草视频在线观 | 欧洲精品视频在线观看 | 久草福利资源 | 欧美 中文字幕 | 亚洲国产激情 | 成人在线观看网站 | 国产一区免费视频 | 亚洲区视频在线观看 | 人人干在线 | yellow在线视频免费观看 | 午夜午夜精品一区二区三区文 | 天天射影院 | 午夜国产视频 | av网站免费 | 私人毛片免费高清视频 | 亚洲欧美日韩在线 | 成年人在线视频 | 香蕉久久久 |