`
y806839048
  • 浏览: 1119115 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

spring mvc校验

阅读更多

 

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(1)Spring MVC 校验

    总结起来,Spring MVC 的数据校验机制提供了强大的功能,包括基础的 JSR-303 校验、自定义校验以及组合校验,可以灵活地满足各种场景下的数据验证需求。在实际项目中,合理利用这些功能,可以有效提高代码质量,减少...

    springmvc数据验证

    Spring MVC 是一个强大的Java web应用程序框架,用于构建高效、可维护的Web应用。它整合了Spring框架的功能,提供了模型-视图-控制器(MVC)架构模式,使得开发者可以更专注于业务逻辑,而不是底层实现。在Spring ...

    spring mvc 校验

    springmvc 校验时所需要的三个包validation-api.jar hibernate-validator-4.1final.jar jbosslogin.jar !解决了tomcat启动的时候报错: classnotfound:javax.validation.constraint的错误!

    最全最经典spring-mvc教程

    对于验证,Spring MVC提供了BindingResult和Validator接口,用于校验模型数据的正确性。 另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring ...

    spring mvc 4.0

    6. **数据绑定与验证**:Spring MVC提供了数据绑定和验证功能,允许将表单数据自动绑定到Java对象,并进行校验,简化了业务逻辑处理。 7. **视图解析**:Spring MVC 4.0支持多种视图技术,如JSP、FreeMarker、...

    Spring MVC 基础实例源码01

    11. **Validation**:Spring提供了数据验证机制,可以通过`@Valid`注解和Validator接口实现对表单数据的校验。 12. **Interceptor**:拦截器,允许在请求处理前后执行自定义逻辑,如日志记录、权限检查等。 13. **...

    spring MVC_快速入门

    Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种MVC(Model-View-Controller)架构模式的实现,帮助开发者处理HTTP请求、数据绑定、...

    Spring mvc validator 需要的校验jar包

    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客户关系管理系统,前端采用easyui编写.zip

    《基于Spring、Spring MVC、MyBatis的Java客户关系管理系统详解》 在现代企业运营中,客户关系管理(CRM)系统扮演着至关重要的角色,它帮助企业有效地管理与客户的交互,提高销售效率,优化客户服务,从而增强企业...

    最简单的用户登录与注册系统 spring mvc spring jdbc

    Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而Spring JDBC则是Spring提供的用于简化数据库操作的工具。 【描述】"用spring4.0.5版本开发的,spring mvc,spring jdbc,最简单的用户登录,注册和...

    Spring MVC学习框架

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分。Spring 框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)为核心,而 Spring...

    spring mvc

    7. **Form Handling**: Spring MVC 提供了强大的表单处理能力,包括自动数据绑定、数据校验等功能。通过@Valid可以进行数据验证,@RequestParam和@PathVariable用于获取请求参数。 8. **Interceptors**: 拦截器是...

    spring MVC文档

    Spring MVC是Spring框架的一个核心模块,它主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。这篇文档详细地介绍了Spring MVC的功能、工作原理以及如何将其有效地应用于实际项目中。Spring MVC的设计目标是...

    Spring MVC数据校验.docx

    数据校验在Spring MVC中通常借助于Hibernate Validator实现,它提供了丰富的校验注解,如: - `@NotNull`:检查值是否为null。 - `@NotBlank`:检查字符串是否非空且非空白。 - `@NotEmpty`:检查集合、数组或Map...

    精通Spring MVC4 电子版_springmuv_

    它是一个基于模型-视图-控制器(MVC)架构模式的轻量级Web框架,提供了强大的数据绑定、校验以及灵活的国际化支持。本资源《精通Spring MVC4 电子版》将深入探讨这个框架的各个方面,旨在帮助开发者更好地理解和运用...

    spring MVC基础学习

    Spring MVC 是一款基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。在Spring MVC中,开发者可以利用模型-视图-控制器(MVC)架构模式来分离业务逻辑、数据处理和...

    spring mvc 参数绑定漏洞

    Spring MVC 是一个广泛使用的Java Web框架,用于构建可维护、模块化且松散耦合的Web应用程序。在处理HTTP请求时,Spring MVC 提供了参数绑定功能,将HTTP请求中的参数映射到控制器方法的参数上,使得开发更加便捷。...

Global site tag (gtag.js) - Google Analytics