成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:171日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美中日韩免费视频| 午夜视频久久久久久| 欧洲色大大久久| 欧美一区二区视频在线观看2022| 国产婷婷一区二区| 亚洲国产日韩a在线播放性色| 国产一区二区三区在线观看免费 | 亚洲一区二区三区四区五区午夜| 欧美日韩的一区二区| 国产精品国产自产拍高清av| 美女视频黄 久久| 欧美激情视频一区二区三区在线播放 | 国产欧美一区视频| 青青草伊人久久| 午夜久久黄色| 国产午夜精品一区二区三区四区 | 欧美性生活大片视频| 国产精品成人免费在线| 欧美久久一级| 自拍偷拍国产亚洲| 成人黄色av网站在线| 亚洲欧美日韩在线观看a三区| 一区二区三区欧美久久| 成人av午夜电影| 2020国产精品| 蜜桃视频第一区免费观看| 色狠狠综合天天综合综合| 国产精品久久99| 激情久久久久| 精品久久久久久综合日本欧美| 首页国产欧美日韩丝袜| 国产精品观看| 成人在线一区二区三区| 久久久久久久久久久一区| 久久久高清一区二区三区| 美女被吸乳得到大胸91| 欧美网站大全在线观看| 韩国理伦片一区二区三区在线播放| 国产伦一区二区三区色一情| 亚洲图片欧美一区| 91成人免费在线视频| 国产精品综合一区二区三区| 久久久久久久久久码影片| 免费欧美日韩国产三级电影| 7777精品伊人久久久大香线蕉超级流畅 | 奇米影视在线99精品| 欧美放荡的少妇| 日日嗨av一区二区三区四区| 久久久精品午夜少妇| 另类综合日韩欧美亚洲| 中文欧美日韩| 国产日韩欧美精品在线| 亚洲无毛电影| 日本欧美在线观看| 亚洲欧美视频| 久久不见久久见免费视频7| 欧美va日韩va| 影音先锋日韩资源| 国产调教视频一区| 亚洲精品一区二区三区樱花| 久久婷婷国产综合精品青草| 国产一区二区三区四区hd| 一区二区三区在线观看动漫| 色哟哟国产精品| 亚洲一区二区三区自拍| 亚洲国产二区| 日本最新不卡在线| 久久综合九色综合97_久久久| 精品9999| 看片的网站亚洲| 国产亚洲精品精华液| 亚洲欧美日韩在线综合| 国产福利一区二区| 在线不卡一区二区| 欧美三级不卡| 国产精品久久久久婷婷| 久久黄色网页| 天天爽夜夜爽夜夜爽精品视频| 精品视频在线看| 激情五月婷婷综合网| 久久奇米777| 国产精品一级久久久| 国产老肥熟一区二区三区| 国产精品人人做人人爽人人添| 91麻豆国产在线观看| 91精品国产综合久久久久久久久久| 97精品国产97久久久久久久久久久久| 日韩欧美一级特黄在线播放| 国产麻豆成人精品| 久久久美女毛片| 久久久人人人| 97久久人人超碰| 亚洲r级在线视频| 久久青青草综合| 97国产一区二区| 日本欧美一区二区三区| 国产欧美日韩麻豆91| 欧洲亚洲国产日韩| 狠狠色丁香久久综合频道| 国产福利精品一区二区| 一区二区三区电影在线播| 日韩欧美一区电影| 欧美亚洲一级| 欧美呦呦网站| 国产精品福利一区| 在线播放国产精品二区一二区四区| 韩国免费一区| 国内成+人亚洲+欧美+综合在线 | 一区二区亚洲| 精品一区二区三区免费播放| 午夜一级在线看亚洲| 国产在线视频精品一区| 怡红院av一区二区三区| aⅴ色国产欧美| 久久97超碰国产精品超碰| 亚洲欧美日韩系列| 国产欧美一区二区色老头| 国产成人精品www牛牛影视| 亚洲午夜久久久久久久久久久| 精品久久久久久无| 91久久一区二区| 99国产成+人+综合+亚洲欧美| 成人性生交大片免费| 日韩精品一级中文字幕精品视频免费观看| 中文在线一区二区| 国产精品日韩精品欧美精品| 男女男精品视频| 最新久久zyz资源站| 久久狠狠婷婷| 欧美日韩成人| 成人免费视频app| 国产自产高清不卡| 人人爽香蕉精品| 亚洲一二三区视频在线观看| 国产精品久久久久永久免费观看| 91精品国产综合久久精品图片| 久久久久久九九九九| 一区二区三区你懂的| 国语精品一区| 欧美在线影院| 成人小视频在线| 激情综合色丁香一区二区| 五月天视频一区| 一区二区三区四区精品在线视频 | av午夜一区麻豆| 日韩毛片在线免费观看| 欧美大肚乱孕交hd孕妇| 欧美精品久久一区二区三区| 在线观看视频一区二区欧美日韩 | 中文字幕免费不卡| 久久久国际精品| wwww国产精品欧美| 日韩免费高清av| 91精品在线免费观看| 欧美日韩黄色一区二区| 色噜噜狠狠成人网p站| 香蕉久久夜色精品国产| 亚洲人成7777| 亚洲乱码一区二区三区在线观看| 成人欧美一区二区三区小说| 亚洲国产精品v| 国产欧美日韩激情| 亚洲国产成人在线| 日本一区二区久久| 国产精品视频免费看| 国产精品视频九色porn| 中文字幕久久午夜不卡| 中文字幕精品—区二区四季| 国产精品毛片在线看| 亚洲影院一区| 母乳一区在线观看| 一本久久a久久精品亚洲| 色婷婷精品久久二区二区蜜臂av| 欧美一区二区三区另类| 欧美日韩一区二区三区在线观看免| 欧美在线亚洲| 亚洲高清不卡| 国产日韩久久| 亚洲一区久久| 久久久久九九九| 欧美丝袜自拍制服另类| 69久久夜色精品国产69蝌蚪网| 日韩亚洲欧美高清| 老司机精品久久| 日本福利一区二区| 欧美色视频在线| 欧美一区二区三区男人的天堂| 日韩一区二区不卡| 久久欧美一区二区| 国产精品欧美一区喷水| 亚洲欧洲av在线| 亚洲午夜久久久久久久久电影院| 丝袜美腿亚洲色图| 久久精品国产久精国产爱| 国产精品一品二品| 91亚洲国产成人精品一区二区三| 国产精品v亚洲精品v日韩精品| 国产精品久久久对白| 91高清在线观看| 欧美一级在线视频|