spring mvc校验
1,引入jar
<!-- 属性验证 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
2,配置
xml:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:ValidationMessages"></property>
<property name="fileEncodings" value="utf-8"></property>
<property name="cacheSeconds" value="120"></property>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
<property name="validationMessageSource" ref="messageSource"></property>
</bean>
<bean id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator"></property>
</bean>
ValidationMessages:
notEmpty.message={field}\u4E0D\u80FD\u4E3A\u7A7A
phone.message=\u624B\u673A\u53F7\u4E0D\u6B63\u786E
number.message={field}\u5FC5\u987B\u4E3A\u7EAF\u6570\u5B57
json.message={field}\u4E0D\u662FJson\u5B57\u7B26\u4E32\u7C7B\u578B
jsonArray.message={field}\u4E0D\u662FJsonArray\u5B57\u7B26\u4E32\u7C7B\u578B
3,使用
@RequestMapping("apply")
@ResponseBody
public ApiResponse insureApply(@Valid @RequestBody InsureApplyRequest insureApplyRequest, Errors errors) throws Exception {
//验证参数
checkError(errors);----spring入参的一级校验
Class insureCheckBean = factoryBank.getInsureCheckBean(insureApplyRequest.getBankType());
Object object = JSONObject.parseObject(insureApplyRequest.getInsureInfo(), insureCheckBean);
String checkResult = BeanUtils.checkBean(object);----里面的json转化成实体之后的二级校验
}
////可以放在base control
/**
* 校验请求参数
* @param errors
* @throws ParamException
*/
public void checkError(Errors errors) throws ParamException {
if(errors.hasErrors()){
List<FieldError> fieldErrors = errors.getFieldErrors();
StringBuffer buffer = new StringBuffer();
for(FieldError fieldError:fieldErrors){
//String field = fieldError.getField();
String message = fieldError.getDefaultMessage();
buffer.append(message).append("; ");
}
throw new ParamException(CodeEnum.CODE_0002.getMsg()+"{"+buffer.toString()+"}");
}
}
自定义校验(一般用于二级校验)
1,实体中用相关的注解--可以自定义也可以用框架的(此时没有用springmvc本身校验)
变化大的字段不必常规建立一个表涵盖所有字段,只要用一个字段存储json即可,用的时候根据类型转化 这一个字段所在实体可以spring入参的时候校验
里面的那个字段转化成实体后就不能在入参的时候校验,可以自定义工具类,结合注解(校验的时候可以spring valid和自定义根据注解自己用工具类校验结合---分层校验)
package com.houbank.bank.util.base;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.houbank.bank.util.base.tst.APIFlowRequest;
import com.houbank.bank.util.base.tst.InsuredGuRelatedParty;
import com.houbank.bank.util.component.annotation.IsJsonArray;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.Valid;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by zhangzhile on 2017/11/10.
*/
public class BeanUtils {
/**
* 检查bean中的必要参数
*
* @param object
* @return
* @throws Exception
*/
public static String checkBean(Object object) throws Exception {
Class cls = object.getClass();
StringBuilder stringBuilder = new StringBuilder();
for (; cls != Object.class; cls = cls.getSuperclass()) {
Field[] fieldes = cls.getDeclaredFields();
for (Field field : fieldes) {
field.setAccessible(true);
NotEmpty annotation = field.getAnnotation(NotEmpty.class);
IsJsonArray isJsonArray = field.getAnnotation(IsJsonArray.class);
if (annotation != null
&& StringUtils.isBlank((String) field.get(object))) {
stringBuilder.append(field.getName());
stringBuilder.append(";");
}
if (isJsonArray != null
&& !JsonUtils.isJsonArrayString((String) field.get(object))) {
stringBuilder.append(field.getName());
stringBuilder.append(";");
}
}
}
return stringBuilder.toString();
}
/**
* 检查bean中含有List的必要参数
*
* @param object
* @return
* @throws Exception
*/
public static String checkBeans(Object object) throws Exception {
Class cls = object.getClass();
StringBuilder stringBuilder = new StringBuilder();
for (; cls != Object.class; cls = cls.getSuperclass()) {
Field[] fieldes = cls.getDeclaredFields();
for (Field field : fieldes) {
field.setAccessible(true);
NotEmpty annotation = field.getAnnotation(NotEmpty.class);
IsJsonArray isJsonArray = field.getAnnotation(IsJsonArray.class);
Valid valid = field.getAnnotation(Valid.class);
if (annotation != null
&& StringUtils.isBlank((String) field.get(object))) {
stringBuilder.append(field.getName());
stringBuilder.append(";");
}
if (isJsonArray != null
&& !JsonUtils.isJsonArrayString((String) field.get(object))) {
stringBuilder.append(field.getName());
stringBuilder.append(";");
}
if (valid != null
&& !ArrayIsNotNull.isNull( (List<Object>)field.get(object))) {
List<Object> os=(List<Object>) field.get(object);
for(Object o : os){
checkBean(stringBuilder,o);
}
}else if(valid != null && ArrayIsNotNull.isNull( (List<Object>)field.get(object))){
stringBuilder.append(field.getName());
stringBuilder.append(";");
}
}
}
return stringBuilder.toString();
}
/**
* 检查bean中的必要参数增加参数
*
* @param object
* @return
* @throws Exception
*/
public static String checkBean(StringBuilder stringBuilder,Object object) throws Exception {
Class cls = object.getClass();
for (; cls != Object.class; cls = cls.getSuperclass()) {
Field[] fieldes = cls.getDeclaredFields();
for (Field field : fieldes) {
field.setAccessible(true);
NotEmpty annotation = field.getAnnotation(NotEmpty.class);
IsJsonArray isJsonArray = field.getAnnotation(IsJsonArray.class);
if (annotation != null
&& StringUtils.isBlank((String) field.get(object))) {
stringBuilder.append(field.getName());
stringBuilder.append(";");
}
if (isJsonArray != null
&& !JsonUtils.isJsonArrayString((String) field.get(object))) {
stringBuilder.append(field.getName());
stringBuilder.append(";");
}
}
}
return stringBuilder.toString();
}
public static void main(String[] args) throws Exception {
APIFlowRequest aPIFlowRequest=new APIFlowRequest();
aPIFlowRequest.setClientCode("111");
aPIFlowRequest.setPolicySort("222");
List<InsuredGuRelatedParty> list=new ArrayList<InsuredGuRelatedParty>();
InsuredGuRelatedParty ins=new InsuredGuRelatedParty();
ins.setInsuredName("33");
ins.setInsuredIdentity("55");
list.add(ins);
aPIFlowRequest.setInsuredGuRelatedPartyDtoList(list);
JSONArray.toJSON(list);
String json = JSONObject.toJSONString(aPIFlowRequest);
Map<Object, Object> map=new HashMap<>();
checkBeans(aPIFlowRequest);
//map.put("", "");
//student.setMap(map);
//isNullAndThrowExp(new String[]{"age","nameString","isPeople","list","map"},student,student.getAge(),student.getNameString(),student.isPeople(),student.getList(),student.getMap());
}
}
相关推荐
总结起来,Spring MVC 的数据校验机制提供了强大的功能,包括基础的 JSR-303 校验、自定义校验以及组合校验,可以灵活地满足各种场景下的数据验证需求。在实际项目中,合理利用这些功能,可以有效提高代码质量,减少...
Spring MVC 是一个强大的Java web应用程序框架,用于构建高效、可维护的Web应用。它整合了Spring框架的功能,提供了模型-视图-控制器(MVC)架构模式,使得开发者可以更专注于业务逻辑,而不是底层实现。在Spring ...
springmvc 校验时所需要的三个包validation-api.jar hibernate-validator-4.1final.jar jbosslogin.jar !解决了tomcat启动的时候报错: classnotfound:javax.validation.constraint的错误!
对于验证,Spring MVC提供了BindingResult和Validator接口,用于校验模型数据的正确性。 另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring ...
6. **数据绑定与验证**:Spring MVC提供了数据绑定和验证功能,允许将表单数据自动绑定到Java对象,并进行校验,简化了业务逻辑处理。 7. **视图解析**:Spring MVC 4.0支持多种视图技术,如JSP、FreeMarker、...
11. **Validation**:Spring提供了数据验证机制,可以通过`@Valid`注解和Validator接口实现对表单数据的校验。 12. **Interceptor**:拦截器,允许在请求处理前后执行自定义逻辑,如日志记录、权限检查等。 13. **...
Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种MVC(Model-View-Controller)架构模式的实现,帮助开发者处理HTTP请求、数据绑定、...
spring mvc校验框架所需的几个jar包hibernate-validator-6.0.7.Final.jar、logging-3.1.0.CR2.jar、validator-api-2.0.2.jar
《基于Spring、Spring MVC、MyBatis的Java客户关系管理系统详解》 在现代企业运营中,客户关系管理(CRM)系统扮演着至关重要的角色,它帮助企业有效地管理与客户的交互,提高销售效率,优化客户服务,从而增强企业...
Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而Spring JDBC则是Spring提供的用于简化数据库操作的工具。 【描述】"用spring4.0.5版本开发的,spring mvc,spring jdbc,最简单的用户登录,注册和...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分。Spring 框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)为核心,而 Spring...
7. **Form Handling**: Spring MVC 提供了强大的表单处理能力,包括自动数据绑定、数据校验等功能。通过@Valid可以进行数据验证,@RequestParam和@PathVariable用于获取请求参数。 8. **Interceptors**: 拦截器是...
Spring MVC是Spring框架的一个核心模块,它主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。这篇文档详细地介绍了Spring MVC的功能、工作原理以及如何将其有效地应用于实际项目中。Spring MVC的设计目标是...
数据校验在Spring MVC中通常借助于Hibernate Validator实现,它提供了丰富的校验注解,如: - `@NotNull`:检查值是否为null。 - `@NotBlank`:检查字符串是否非空且非空白。 - `@NotEmpty`:检查集合、数组或Map...
它是一个基于模型-视图-控制器(MVC)架构模式的轻量级Web框架,提供了强大的数据绑定、校验以及灵活的国际化支持。本资源《精通Spring MVC4 电子版》将深入探讨这个框架的各个方面,旨在帮助开发者更好地理解和运用...
Spring MVC 是一款基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。在Spring MVC中,开发者可以利用模型-视图-控制器(MVC)架构模式来分离业务逻辑、数据处理和...
Spring MVC 是一个广泛使用的Java Web框架,用于构建可维护、模块化且松散耦合的Web应用程序。在处理HTTP请求时,Spring MVC 提供了参数绑定功能,将HTTP请求中的参数映射到控制器方法的参数上,使得开发更加便捷。...