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

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

基于javax.validation結合spring的最佳實踐

瀏覽:164日期:2023-06-28 17:23:15
前言

本人先將用到的配置、工具類貼出來,然后一步步告訴大家怎么使用

JSR303 是一套JavaBean參數校驗的標準,它定義了很多常用的校驗注解,我們可以直接將這些注解加在我們JavaBean的屬性上面,就可以在需要校驗的時候進行校驗了。

注解如下:

基于javax.validation結合spring的最佳實踐

Hibernate validator 在JSR303的基礎上對校驗注解進行了擴展,擴展注解如下:

基于javax.validation結合spring的最佳實踐

pom中添加注解

<!--jsr 303--><dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version></dependency><!-- hibernate validator--><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.0.Final</version></dependency>Spring配置

<bean />自己的Violation實體

這里使用的Lombok獲取get和set,使用的@Getter注解

@AllArgsConstructor 這個注解是lombok中為類提供一個全參的構造方法

package com.alibaba.xianzhi.validator;import java.io.Serializable;import lombok.AllArgsConstructor;import lombok.Getter;/** * Created by Jackielee on 2017 * @author: lizhilong * @date: 2017-11-14 18:01:34 */@Getter@AllArgsConstructorpublic class Violation implements Serializable { private static final long serialVersionUID = -1731546219600067986L; private final String message; private final Object bean; private final String property; private final Object value;}封裝一個ViolationBuild

后面會說這個類的用法

package com.alibaba.xianzhi.validator;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;import javax.validation.ConstraintViolation;import lombok.AllArgsConstructor;import lombok.Getter;import org.apache.commons.collections.CollectionUtils;/** * @author: lizhilong * @date: 2017-11-15 11:41:12 */@AllArgsConstructorpublic class ViolationBuild{ @Getter private Set<Violation> violations; public String getMessage() {List<String> list = new ArrayList<String>();for (Violation violation : violations) { list.add(violation.getMessage());}return list.size() > 0 ? list.get(0) : ''; } public static <T> ViolationBuild build(Set<ConstraintViolation<T>> cvs) {Set<Violation> result = new HashSet<Violation>();if (CollectionUtils.isNotEmpty(cvs)) { for (ConstraintViolation cv : cvs) {result.add(new Violation(cv.getMessage(), cv.getRootBean() == null ? null : cv.getRootBean().toString(), cv.getPropertyPath() == null ? null : cv.getPropertyPath().toString(), cv.getInvalidValue())); }}return new ViolationBuild(result); }}用來校驗實體,構建并存儲校驗后的信息ValidatorProvider

package com.alibaba.xianzhi.validator;import java.util.Set;import javax.validation.ConstraintViolation;import javax.validation.ValidationException;import javax.validation.Validator;import lombok.AllArgsConstructor;import lombok.Getter;/** * @author: lizhilong * @date: 2017-11-15 11:40:59 */@AllArgsConstructor@Getterpublic class ValidatorProvider { private final Validator validator; public <T> ViolationBuild validate(T object) {Set<ConstraintViolation<T>> violations;try { violations = validator.validate(object);} catch (IllegalArgumentException iae) { throw iae;} catch (ValidationException ve) { throw ve;}return ViolationBuild.build(violations); } public <T> ViolationBuild validate(T object, Class<?>... groups) {Set<ConstraintViolation<T>> violations;try { violations = validator.validate(object, groups);} catch (IllegalArgumentException iae) { throw iae;} catch (ValidationException ve) { throw ve;}return ViolationBuild.build(violations); } public <T> ViolationBuild validateProperty(T object, String propertyName, Class<?>... groups) {Set<ConstraintViolation<T>> violations;try { violations = validator.validateProperty(object, propertyName, groups);} catch (IllegalArgumentException iae) { throw iae;} catch (ValidationException ve) { throw ve;}return ViolationBuild.build(violations); } public <T> ViolationBuild validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups) {Set<ConstraintViolation<T>> violations;try { violations = validator.validateValue(beanType, propertyName, value, groups);} catch (IllegalArgumentException iae) { throw iae;} catch (ValidationException ve) { throw ve;}return ViolationBuild.build(violations); }}BaseService讓自己的service繼承此類

java不能多繼承 所以如果已經繼承了別的類,可以將此類注入出來

此類是為了拿到一個單例的ValidatorProvider

package com.alibaba.xianzhi.base.web;import javax.annotation.Resource;import javax.validation.Validator;import com.alibaba.xianzhi.validator.ValidatorProvider;/** * BaseService * @author: lizhilong * @date: 2017-11-15 11:41:24 */public abstract class BaseService { @Resource protected Validator validator; private ValidatorProvider validatorProvider; protected ValidatorProvider getValidatorProvider() {if (validatorProvider == null) { validatorProvider = new ValidatorProvider(validator);}return validatorProvider; }}所需校驗的實體類

說明:Constants為接口常量

@Getter@AllArgsConstructorpublic class SubmitVO extends BaseVO { @NotNull(message='廠商不能為空') private Long companyId; @Length(min=0, max=100, message='標題請控制在' + Constants.MAX_TITLE + '個字符以內') @NotNull(message='標題不能為空') private String title; @Length(min=0, max=65535, message='修復方案長度不能超過' + Constants.MAX_FIX_ADVICE) @NotNull(message='修復方案不能為空') private String fixAdvice;}下面就是如何使用

public BaseResponse save(SubmitVO submitVO ) {/** * getValidatorProvider()此方法是BaserService中, * 上面說到本人的service是繼承此 * service的所以可以直接用 **/ValidatorProvider validatorProvider = getValidatorProvider();/** * validatorProvider調用validate(Object obj)進行校驗 * 返回ViolationBuild **/ViolationBuild validateFlaw = validatorProvider.validate(submitVO);/** * 此時如果校驗有失敗的 容器中便會存儲信息,ViolationBuild可以通過自己的 * getMessage方法獲取信息(此方法可以自己封裝成自己想要的樣子) **/System.out.println(validateFlaw.getMessage()); }

打印結果:標題請控制在100個字符以內

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲国产精品久久久男人的天堂 | 欧美大片顶级少妇| 亚洲尤物视频在线| 影音先锋亚洲电影| 日本一区二区三区电影| 国产精品18久久久久久vr| 亚洲精品日韩精品| 亚洲视频在线观看三级| 欧美日韩免费精品| 欧美激情在线看| 午夜性色一区二区三区免费视频| 日韩一级高清毛片| 国产老妇另类xxxxx| 7777精品伊人久久久大香线蕉的 | 国产精品66部| 777奇米四色成人影色区| 另类综合日韩欧美亚洲| 欧美色窝79yyyycom| 精品亚洲欧美一区| 欧美精品vⅰdeose4hd| 国内久久精品视频| 欧美日韩不卡视频| 国产精品白丝jk黑袜喷水| 欧美一区二区三区爱爱| 国产成人综合自拍| 精品久久久久久久久久久久包黑料 | 亚洲福利专区| 亚洲免费三区一区二区| 亚洲毛片一区| 欧美不卡一区二区| 不卡一卡二卡三乱码免费网站| 91精品国产综合久久精品麻豆 | 精品一区二区在线播放| 欧美日韩国产小视频在线观看| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩三级一区| 粉嫩绯色av一区二区在线观看| 精品国产一区二区三区久久影院| 91天堂素人约啪| 国产精品久久久久久亚洲伦| 99国产精品久久久久老师| 亚洲色图另类专区| 亚洲一区成人| 麻豆精品一区二区综合av| 这里只有精品99re| 成人午夜视频在线| 欧美激情一二三区| av不卡在线| 蜜臀va亚洲va欧美va天堂| 欧美猛男gaygay网站| 成人黄色a**站在线观看| 中文字幕久久午夜不卡| 久久er99精品| 精品国产凹凸成av人网站| 国产精品s色| 一区二区三区日韩欧美| 久久精品在线| 久久99久久99小草精品免视看| 欧美一区二区三区日韩视频| 欧美一区二区三区在线免费观看 | 亚洲人快播电影网| 噜噜噜躁狠狠躁狠狠精品视频| 免费看日韩a级影片| 91精品国产乱码久久蜜臀| 99国产一区二区三精品乱码| 自拍偷拍亚洲欧美日韩| 久久亚洲精选| 国产传媒日韩欧美成人| 中文字幕在线一区免费| 久久精品123| 国产精品一区三区| 国产精品久久久久久久浪潮网站| 国产美女在线精品免费观看| 久久精品国产第一区二区三区| 欧美成人艳星乳罩| 激情综合在线| 日韩精品电影在线观看| 日韩免费性生活视频播放| 国自产拍偷拍福利精品免费一| 亚洲一区二区视频| 777亚洲妇女| 伊人精品视频| 美国十次综合导航| 国产婷婷色一区二区三区在线| 中文一区在线| 久久精品999| 国产欧美日韩视频在线观看| 久久久久久国产精品mv| 99精品欧美一区二区三区小说 | 午夜精品久久久久影视| 日韩免费性生活视频播放| 亚洲高清久久| 国产精品资源网站| 国产精品麻豆网站| 欧洲生活片亚洲生活在线观看| www.亚洲色图| 亚洲一区电影777| 欧美一级久久久久久久大片| 亚洲经典视频在线观看| 国产精品一区二区黑丝| 有码一区二区三区| 欧美哺乳videos| 美女久久一区| 91丨porny丨蝌蚪视频| 亚瑟在线精品视频| 久久久噜噜噜久久中文字幕色伊伊 | 国产午夜一区二区三区| 色婷婷久久综合| 国产精品豆花视频| 麻豆久久一区二区| 亚洲品质自拍视频| 欧美一级精品大片| 久久婷婷亚洲| 欧美日本韩国一区二区三区| 美女高潮久久久| 综合av第一页| 日韩一区二区三区av| 亚洲免费婷婷| 欧美精品91| 国产中文字幕精品| 一区二区三区欧美在线观看| 精品三级在线观看| 久久综合久久久| 一区二区自拍| 国产成人午夜精品5599| 天天操天天色综合| 国产精品免费丝袜| 日韩一区二区在线看片| 免费视频一区| 午夜国产精品视频| 国产中文字幕精品| 天涯成人国产亚洲精品一区av| 欧美激情综合网| 欧美剧在线免费观看网站| 国产精品日韩一区二区三区| 91蜜桃免费观看视频| 国产一区二区在线观看免费| 亚洲高清视频在线| 中文字幕一区二区三区不卡在线| 日韩一区二区视频| 欧美图区在线视频| 国产免费成人| 亚洲大胆av| 99国产精品久| 国产精品自拍毛片| 美国毛片一区二区三区| 亚洲第一成人在线| 《视频一区视频二区| 国产三区在线成人av| 日韩一区二区三| 欧美日韩三级一区二区| 久久精品男女| 日韩一级在线| 狠狠色综合网| 99re成人在线| 国产东北露脸精品视频| 麻豆精品视频在线观看视频| 亚洲国产婷婷综合在线精品| 日韩美女啊v在线免费观看| 国产亚洲一区二区三区| 日韩精品中午字幕| 欧美日韩国产欧美日美国产精品| 久久亚洲一区| 免费看亚洲片| 亚洲综合激情| 亚洲专区一区二区三区| 日韩一级精品| 国产精品久久久久久模特 | 在线看国产日韩| 久久国产精品亚洲va麻豆| 国产精品久久久久久久免费软件| 99视频在线精品国自产拍免费观看| 欧美日韩一区二区国产| 91美女片黄在线观看91美女| 99久久婷婷国产综合精品电影| 大白屁股一区二区视频| 国产成人精品影视| 国产suv精品一区二区三区| 国产精品一区在线观看乱码| 国产精品一区二区不卡| 粉嫩aⅴ一区二区三区四区五区| 国产精品996| 成人app下载| 成人高清免费观看| 福利91精品一区二区三区| 国产精品白丝jk白祙喷水网站| 国产精品一二三在| 高清不卡一区二区| 成人ar影院免费观看视频| 91猫先生在线| 国产精品hd| 亚洲伦伦在线| 免费亚洲网站| 欧美亚男人的天堂| 4438x亚洲最大成人网| 欧美不卡一二三| 国产精品电影一区二区| 一级日本不卡的影视| 婷婷国产在线综合| 精品一区二区三区在线观看国产 |