日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring中使用JSR303請求約束判空的實現

瀏覽:196日期:2023-07-28 11:38:16
1. 適用場景

有時候我們在表單里提交一系列參數, 到后臺封裝成一個對象, 要對對象的屬性做各種字段值的約束; 這時候, 當然可以if-else一個一個的判斷, 有更簡潔的做法, 就是使用 JSR303+spring的validation:

2. 使用方法步驟(分3步) 實體類加字段約束注解 Controller類中@Valid標注啟用(@Validated也兼容@Valid) BindingResult獲取報錯信息

2.1 實體類加字段約束注解

如我們要收集前端表單的字段數據到Person實體中:

對需要約束的字段進行注解標注;

示例:

2.1.1 Person.java

package com.niewj.demo.model;import lombok.Data;import org.hibernate.validator.constraints.Length;import org.hibernate.validator.constraints.URL;import javax.validation.constraints.*;import java.util.List;@Datapublic class Person { @Length(min = 4, max = 10) @NotNull(message = 'name不能為空') private String name; @Min(0) @Max(40) @NotNull(message = 'age不能為空') private Integer age; @NotBlank @NotBlank @URL(message = 'logo必須是URL格式') private String logo; @NotEmpty(message = 'hobbies不能為空') private List<String> hobbies; @Email @NotNull(message = 'email不能為空!') private String mail;}

@NotNull 約束字段不可為空;

@NotEmpty 約束集合/map等不能為空不能為0元素

@Email 約束是 email格式

@URL 約束必須是url的格式

message屬性可以修改默認錯誤說明

2.2 Controller類中@Valid標注啟用(@Validated兼容@Valid)

2.2.1 HelloController.java

package com.niewj.demo.controller;import com.google.gson.Gson;import com.niewj.demo.common.Result;import com.niewj.demo.model.Person;import com.niewj.demo.service.TestService1;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;import javax.validation.Valid;import java.util.HashMap;import java.util.Map;/** * test * * @author niewj * @since 2020/11/16 15:22 */@Controllerpublic class HelloController { /** * @param person * @param bindingResult * @return */ @PostMapping('/test') @ResponseBody public Result doSth(@Valid @RequestBody Person person, BindingResult bindingResult) { Map<String, String> map = new HashMap<>(); if (bindingResult.hasErrors()) { bindingResult.getFieldErrors().stream().forEach(fe-> map.put(fe.getField(), fe.getDefaultMessage())); System.out.println(bindingResult.getFieldError().getDefaultMessage()); return Result.withErrorParamData(map); } return Result.withSuccessData(person); }}

@RequestBody可以將body中的請求流信息(Request.getInputStream)通過HttpMessageConverter自動轉換為目標java類型:

如果前端 Content-Type為application/json, 就使用 JSON消息轉換器 幫你轉為JSON對象; 如果前端 Content-Type為application/xml, 就使用 XML消息轉換器 幫你轉為xml; 如果前端 Content-Type為text/plain, 就是用 String消息轉換器 幫你轉成 String; (只有類型為String時才可以轉換)

2.2.2 Result.java:

package com.niewj.demo.common;import lombok.Data;import java.io.Serializable;import java.util.Map;/** * 返回結果模板封裝 * * @author niewj * @since 2020/12/17 18:05 */@Datapublic class Result<T> implements Serializable { private int code; private String msg; private T data; public Result(int code, String msg, T data) { this(code, msg); this.data = data; } public Result(int code, String msg) { this.msg = msg; this.code = code; } public static <T> Result<T> withData(ResponseEnum responseCode, T data) { Result<T> re = new Result(responseCode.getCode(), responseCode.getMsg()); re.data = data; return re; } public static Result<String> withSuccessNoData() { Result re = new Result(ResponseEnum.SUCCESS.getCode(), ResponseEnum.SUCCESS.getMsg()); re.data = ''; return re; } public static <T> Result<T> withSuccessData(T data) { Result re = new Result(ResponseEnum.SUCCESS.getCode(), ResponseEnum.SUCCESS.getMsg()); re.data = data; return re; } public static Result<Map<String, String>> withErrorParamData(Map<String, String> data) { Result re = new Result(ResponseEnum.BAD_REQUEST.getCode(), ResponseEnum.BAD_REQUEST.getMsg()); re.data = data; return re; }}

2.2.3 ResponseEnum.java

package com.niewj.demo.common;/** * 通用響應碼 */public enum ResponseEnum { SUCCESS(200, '成功'), BAD_REQUEST(400, '請求參數不合規'); /** * 錯誤碼 */ private Integer code; /** * 錯誤信息 */ private String msg; ResponseEnum(Integer code, String msg) { this.code = code; this.msg = msg; } public String getMsg() { return msg; } public Integer getCode() { return code; }}

2.3 BindingResult獲取報錯信息

BindingResult用來收集約束字段的錯誤信息, 可通過 bindingResult.hasErrors()的 true來過濾錯誤信息; bindingResult.getFieldErrors() 會返回 List<FieldError>; FieldError 得到字段名: getField(); 得到錯誤信息: getDefaultMessage() 3. 調用測試:

http://localhost:8888/test

3.1 請求用例1: 字段為空

header: Content-Type: application/json

{ 'name': '1'}

響應:

{ 'code': 400, 'msg': '請求參數不合規', 'data': { 'mail': 'email不能為空!', 'hobbies': 'hobbies不能為空', 'name': '長度需要在4和10之間', 'logo': '不能為空', 'age': 'age不能為空' }}

3.2 請求用例2: list無元素/email/url格式不對

header: Content-Type: application/json

{ 'name': '1234', 'hobbies': [], 'mail': 'niewj', 'logo': 'niewj.com'}

響應:

{ 'code': 400, 'msg': '請求參數不合規', 'data': { 'mail': '不是一個合法的電子郵件地址', 'hobbies': 'hobbies不能為空', 'logo': 'logo必須是URL格式', 'age': 'age不能為空' }}

3.3 請求用例3: 完整字段信息

header: Content-Type: application/json

{ 'name': '1234', 'hobbies': ['running'], 'mail': 'hi@niewj.com', 'logo': 'http://niewj.com', 'age': 40}

響應:

{ 'code': 200, 'msg': '成功', 'data': { 'name': '1234', 'age': 40, 'logo': 'http://niewj.com', 'hobbies': [ 'running' ], 'mail': 'hi@niewj.com' }}

到此這篇關于Spring中使用JSR303請求約束判空的實現的文章就介紹到這了,更多相關Spring JSR303請求約束判空內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲91网站| 国产视频一区三区| 亚洲精选91| 久久人人88| 亚洲美女久久精品| 精品视频高潮| 国产一区二区三区黄网站| 欧美黑人做爰爽爽爽| 国产精品伊人| 国产精品a级| 久久av国产紧身裤| 毛片不卡一区二区| 欧美成人精品一级| 国产精品亚洲四区在线观看| 国产探花在线精品一区二区| 日韩精品免费一区二区夜夜嗨| 伊人精品久久| 久久国产成人| 伊人精品视频| 欧美日韩免费观看一区=区三区| 国产精品美女久久久| 久热re这里精品视频在线6| 伊人久久亚洲| 国产欧美日韩亚洲一区二区三区| 国产探花一区在线观看| 久久精品国产久精国产爱| 久久99久久久精品欧美| 国产+成+人+亚洲欧洲在线| 国产色播av在线| 婷婷精品进入| 婷婷亚洲成人| 欧美日韩一区自拍| 成人午夜网址| 欧美天堂视频| 亚洲高清久久| 日韩精品三级| 福利一区二区免费视频 | 一区二区三区四区日本视频| 久久久噜噜噜| 三级欧美在线一区| 国产精品久久久久77777丨| 日韩成人a**站| 久久精品91| 亚洲影视一区二区三区| 国产精选一区| 香蕉精品视频在线观看| 亚洲欧美日韩精品一区二区| 久久xxxx| 国产一区二区亚洲| 日韩视频二区| 牛牛精品成人免费视频| 日韩伦理一区| 久久午夜精品| 卡一卡二国产精品| 久久久久久久久丰满| 免费国产亚洲视频| 精品视频91| 免费不卡中文字幕在线| 日韩**一区毛片| 福利一区和二区| 国产视频一区在线观看一区免费| 国产精品视频一区二区三区四蜜臂 | 日韩avvvv在线播放| 久久字幕精品一区| 日韩天堂av| 国产精品毛片视频| 黄色日韩在线| 国产精品对白久久久久粗| 久久精品亚洲人成影院| 免费精品视频最新在线| 色婷婷综合网| 日韩一区二区三区精品| 波多视频一区| 日韩激情网站| 婷婷综合激情| 精品一区二区三区中文字幕 | 在线亚洲欧美| 久久精品国内一区二区三区| 亚洲一区中文| 国产拍在线视频| 日韩高清二区| 久久国产精品久久久久久电车| 国产日韩欧美一区在线| 亚洲性视频h| 精品一区二区三区免费看| 欧美精品九九| 水蜜桃久久夜色精品一区| 亚洲精品影院在线观看| 亚洲成人国产| 麻豆网站免费在线观看| 欧美日韩一区二区国产| 久久一区二区三区喷水| 成人国产精品一区二区免费麻豆| 日韩国产在线一| 噜噜噜躁狠狠躁狠狠精品视频| 色爱综合网欧美| 欧美专区18| 黑人精品一区| 国产日韩免费| 日韩一二三区在线观看| 国户精品久久久久久久久久久不卡| 国产精品美女在线观看直播| 亚洲伊人影院| se01亚洲视频 | 欧美日韩99| 麻豆亚洲精品| 激情婷婷欧美| 久久中文视频| 国产va免费精品观看精品视频| 亚洲视频国产精品| 在线综合亚洲| 久久福利精品| 国产suv精品一区二区四区视频| 国产亚洲精品精品国产亚洲综合| 蜜桃视频一区二区三区| 99成人在线| 999国产精品视频| 国产精选在线| 97精品国产福利一区二区三区| 日韩精品一区二区三区中文在线 | 人人香蕉久久| 亚洲欧美日韩专区| av不卡免费看| 天堂网在线观看国产精品| 亚洲男女av一区二区| 日韩一区三区| sm久久捆绑调教精品一区| 久久国产人妖系列| 亚洲无线观看| 最新亚洲国产| 日韩精品亚洲一区二区三区免费| 视频一区二区三区在线| 蜜桃久久精品一区二区| 免费国产自线拍一欧美视频| 91成人网在线观看| 亚洲一区二区免费看| 国产精品试看| 亚洲91网站| 国产伦乱精品| 久久精品午夜| 日韩在线短视频| 欧美午夜精彩| 麻豆久久精品| 综合欧美精品| 国产欧美成人| 精品久久久网| 深夜福利视频一区二区| 午夜精品一区二区三区国产| 国产成人久久| 精品美女在线视频| 亚洲精品无播放器在线播放| 福利片在线一区二区| 日本不卡不码高清免费观看| 国产尤物精品| 国产不卡人人| 国产一区二区精品福利地址| 欧美午夜三级| 日本高清不卡一区二区三区视频| 亚洲国产福利| 日韩精品1区| 成人在线视频免费| 亚洲一级少妇| 国产精品毛片一区二区在线看| 国产日韩欧美一区二区三区| 麻豆精品在线观看| 91精品国产91久久久久久黑人| 亚洲一卡久久| 国产精品视频3p| 99tv成人| 午夜电影一区| 日韩av在线中文字幕| 亚洲一级高清| 国产伦精品一区二区三区在线播放| 国产欧美二区| 久久久精品午夜少妇| 亚洲精一区二区三区| 国产精品久久久久久av公交车 | 日本不卡不码高清免费观看| 另类综合日韩欧美亚洲| 视频福利一区| 日韩av电影一区| 成人看片网站| 午夜久久av | 日韩极品在线观看| 欧美日韩国产观看视频| 久久电影一区| 成人一二三区| 巨乳诱惑日韩免费av| 精品伊人久久久| 亚洲欧美网站| 国产精品v一区二区三区| 欧美福利一区| 国产欧美一区| 欧美精品一二| 国产精品自在| 亚洲精品99| 国内不卡的一区二区三区中文字幕| 久久久久国产精品一区二区| 日韩精品三区四区| 激情婷婷亚洲|