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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring中使用JSR303請(qǐng)求約束判空的實(shí)現(xiàn)

瀏覽:194日期:2023-07-28 11:38:16
1. 適用場(chǎng)景

有時(shí)候我們?cè)诒韱卫锾峤灰幌盗袇?shù), 到后臺(tái)封裝成一個(gè)對(duì)象, 要對(duì)對(duì)象的屬性做各種字段值的約束; 這時(shí)候, 當(dāng)然可以if-else一個(gè)一個(gè)的判斷, 有更簡(jiǎn)潔的做法, 就是使用 JSR303+spring的validation:

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

2.1 實(shí)體類加字段約束注解

如我們要收集前端表單的字段數(shù)據(jù)到Person實(shí)體中:

對(duì)需要約束的字段進(jìn)行注解標(biāo)注;

示例:

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屬性可以修改默認(rèn)錯(cuò)誤說(shuō)明

2.2 Controller類中@Valid標(biāo)注啟用(@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中的請(qǐng)求流信息(Request.getInputStream)通過(guò)HttpMessageConverter自動(dòng)轉(zhuǎn)換為目標(biāo)java類型:

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

2.2.2 Result.java:

package com.niewj.demo.common;import lombok.Data;import java.io.Serializable;import java.util.Map;/** * 返回結(jié)果模板封裝 * * @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;/** * 通用響應(yīng)碼 */public enum ResponseEnum { SUCCESS(200, '成功'), BAD_REQUEST(400, '請(qǐng)求參數(shù)不合規(guī)'); /** * 錯(cuò)誤碼 */ private Integer code; /** * 錯(cuò)誤信息 */ 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獲取報(bào)錯(cuò)信息

BindingResult用來(lái)收集約束字段的錯(cuò)誤信息, 可通過(guò) bindingResult.hasErrors()的 true來(lái)過(guò)濾錯(cuò)誤信息; bindingResult.getFieldErrors() 會(huì)返回 List<FieldError>; FieldError 得到字段名: getField(); 得到錯(cuò)誤信息: getDefaultMessage() 3. 調(diào)用測(cè)試:

http://localhost:8888/test

3.1 請(qǐng)求用例1: 字段為空

header: Content-Type: application/json

{ 'name': '1'}

響應(yīng):

{ 'code': 400, 'msg': '請(qǐng)求參數(shù)不合規(guī)', 'data': { 'mail': 'email不能為空!', 'hobbies': 'hobbies不能為空', 'name': '長(zhǎng)度需要在4和10之間', 'logo': '不能為空', 'age': 'age不能為空' }}

3.2 請(qǐng)求用例2: list無(wú)元素/email/url格式不對(duì)

header: Content-Type: application/json

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

響應(yīng):

{ 'code': 400, 'msg': '請(qǐng)求參數(shù)不合規(guī)', 'data': { 'mail': '不是一個(gè)合法的電子郵件地址', 'hobbies': 'hobbies不能為空', 'logo': 'logo必須是URL格式', 'age': 'age不能為空' }}

3.3 請(qǐng)求用例3: 完整字段信息

header: Content-Type: application/json

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

響應(yīng):

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

到此這篇關(guān)于Spring中使用JSR303請(qǐng)求約束判空的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring JSR303請(qǐng)求約束判空內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久中文字幕一区二区三区| 在线看片不卡| 最近国产精品视频| 久久婷婷亚洲| 伊人久久大香线蕉av超碰演员| 不卡一区2区| 人人爽香蕉精品| 日韩高清一区在线| 国产精品115| 精品国产成人| 成人免费网站www网站高清| 日韩成人精品一区二区| 亚洲电影有码| 日韩午夜在线| 亚洲精品乱码| 国产精品tv| www.com.cn成人| 伊人精品在线| 日韩一区二区三区精品 | 午夜久久黄色| 中文字幕一区二区三区在线视频| 亚洲一级淫片| 国产精品18| 日韩欧美一区二区三区免费观看| 激情91久久| 日产欧产美韩系列久久99| 国产精品.xx视频.xxtv| 色偷偷色偷偷色偷偷在线视频| 亚洲电影在线一区二区三区| 蜜臀av亚洲一区中文字幕| 欧美亚洲综合视频| 精品视频高潮| 欧美日韩精品一本二本三本| 中文字幕av一区二区三区人| 久久影院一区二区三区| 成人久久久久| 丝袜美腿亚洲色图| 精品亚洲精品| 日韩网站在线| 午夜在线精品偷拍| 另类小说一区二区三区| 日本成人中文字幕在线视频| 香蕉久久久久久久av网站| 国产精品久久国产愉拍| 蜜桃久久久久| 嫩草伊人久久精品少妇av杨幂| 欧美不卡视频| 国产精品最新| 国产极品久久久久久久久波多结野| 国产日韩一区| 麻豆成人在线观看| 高清一区二区三区av| 日本电影久久久| 亚洲精品极品| 亚洲欧洲国产精品一区| 欧美啪啪一区| 亚洲欧洲国产精品一区| 久久国产电影| 国产亚洲一区二区三区不卡| 1024精品一区二区三区| 美女久久久久久 | 美女少妇全过程你懂的久久| 黄色成人精品网站| 久久精品免费一区二区三区 | 亚洲va中文在线播放免费| 日韩在线一二三区| 1024精品一区二区三区| 色综合五月天| 国产精品1区在线| 先锋影音国产一区| 国产中文字幕一区二区三区| 国产精品白浆| 麻豆视频一区二区| 欧美日韩免费观看一区=区三区| 伊人成人网在线看| 国产午夜一区| 久久国产成人午夜av影院宅| 蜜桃视频免费观看一区| 日韩精品一级| 国产伦乱精品| 亚洲免费福利| 日本成人手机在线| 日本免费久久| 日韩国产欧美视频| 国产精品videossex久久发布 | 日韩综合一区二区| 日韩国产在线不卡视频| 日韩中文av| 蜜桃视频欧美| 91精品国产自产精品男人的天堂 | 精品国产精品国产偷麻豆| 国产精品欧美大片| 色爱综合网欧美| 久久精品资源| 丝袜脚交一区二区| 国产无遮挡裸体免费久久| 欧美日韩国产在线一区| 美女视频黄 久久| 日韩大片在线播放| 一区视频在线| 免费成人性网站| 久久久777| 最近高清中文在线字幕在线观看1| 亚洲激情另类| 国产精品二区不卡| 国产日韩欧美三区| 中文字幕av亚洲精品一部二部| 国产欧美欧美| 涩涩涩久久久成人精品| 成人在线视频免费| 国产日本精品| 国产精品社区| 日韩欧美二区| sm久久捆绑调教精品一区| 亚洲欧美日韩视频二区| 日韩欧美自拍| 麻豆成人av在线| 麻豆成人综合网| 一区久久精品| 视频在线观看一区二区三区| 久久久人人人| 国产精品日韩| 国产精选一区| 久久国产乱子精品免费女| 欧美99久久| 国产亚洲一区在线| 青青青国产精品| 精品一区视频| 美女黄网久久| 免费日韩av| 欧美经典一区| 久久免费视频66| 欧美va亚洲va日韩∨a综合色| 亚洲综合日韩| 亚洲欧美一级| 另类av一区二区| 久久国产视频网| 国产精品毛片久久久| 欧美日本二区| 高清久久精品| 欧美男人天堂| 亚洲美洲欧洲综合国产一区| 鲁大师成人一区二区三区| 亚洲精品视频一二三区| 国产亚洲高清在线观看| 鲁鲁在线中文| 日韩欧美中文字幕电影| 久久99蜜桃| 三级在线观看一区二区| 欧美激情一区| 樱桃成人精品视频在线播放| 日本亚洲欧美天堂免费| 精品一区二区三区在线观看视频 | 国产精品丝袜在线播放| 日本电影久久久| 久久99影视| 色一区二区三区四区| 久久天堂精品| 亚洲永久精品唐人导航网址| 国产亚洲字幕| 日韩中文影院| 国产伊人精品| 天堂va在线高清一区| 国产精品一区二区免费福利视频| 欧美国产免费| 91久久久精品国产| 日韩精品免费视频一区二区三区 | 麻豆极品一区二区三区| 欧洲av不卡| 首页亚洲欧美制服丝腿| 国产精品久久久久久模特| 久久久久欧美精品| 日韩国产在线观看| 韩国精品主播一区二区在线观看| 九九在线精品| 日韩专区视频网站| 日韩高清在线不卡| 91精品国产自产在线观看永久∴| 男女男精品网站| 久久精品一区二区国产| 婷婷精品进入| 国产日韩中文在线中文字幕| 日韩激情一区| 免费视频一区二区| 精品无人区麻豆乱码久久久| 欧美日韩免费观看一区=区三区| 国产欧美日韩亚洲一区二区三区| 日韩中文欧美| 久久国产日韩欧美精品| 国产白浆在线免费观看| 亚洲精品少妇| 亚洲福利一区| 麻豆免费精品视频| 最新国产精品久久久| 欧美男人天堂| 日韩一区二区三区精品视频第3页| 亚洲一级少妇| 日本午夜精品视频在线观看| 久久久蜜桃一区二区人| 国产伦理一区|