SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)

JSR 303是针对bean数据校验提出的一个规范。使用注解方式实现数据校验。

每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践

笔者上面提到的JSR303是专家组成员向JCP提交的第一版Bean Validation,

主流Bean Validation使用Hibernate的实现,本文使用hibernate-validator

各个版本的规范对应关系如下:

  • JSR 380 (Bean Validation 2.0)
  • JSR 349 (Bean Validation 1.1)
  • JSR 303 (Bean Validation 1.0)

JSR 303伴随着JAVAEE 6在2009年发布,Hibernate实现版本4.3.1.Final,Apache BVal实现版本0.5

JSR349伴随着JAVAEE 7在2013年发布,Hibernate实现版本5.1.1.Final,Apache BVal实现版本1.1.2

JSR380伴随着JAVAEE 8在2017年8月发布,完全兼容低版本的JAVASE,Hibernate实现版本6.0.1.Final,Apache BVal实现版本2.0.3(不太确定)

所以如果使用2.0规范,hibernate必须选择6.0.1以上版本

以下是Springmvc中Bean Validation配置过程:

1、在maven中添加规范与实现,缺一不可

  <!--bean validation规范-->
    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>2.0.1.Final</version>
    </dependency>
    <!--bean validation规范实现-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.17.Final</version>
    </dependency>

2、在实体类类上使用注解

public class Post implements Serializable {
    private Integer pid;

    @Size(min = 5, message = "标题太短,无效,长度必须大于5")
    private String title;

    @Size(min = 20, message = "内容太短无效,长度必须大于20")
    private String content;

    //两个时间
    private LocalDateTime publishTime;
    private LocalDateTime replyTime;

    //三个数量
    private Integer replyCount;
    private Integer likeCount;
    private Integer scanCount;

    //两个外键
    private Integer uid;
    private User user;

    @Min(value = 1,message = "请选择话题分类") //话题分类id必须大于0
    private Integer tid;
    private Topic topic;

3、在Controller添加代码(@Valid @ModelAttribute)

   @RequestMapping("publishPost.do")
    public String publishPost(@Valid @ModelAttribute Post post,
                              BindingResult bindingResult,
                              Errors errors, Model model,String action) {

        model.addAttribute("post",post);
        model.addAttribute("action",action);

        if(errors.hasErrors()){
            FieldError fieldError = bindingResult.getFieldError();
            System.out.println("Code:"+fieldError.getCode()+", object:"+fieldError.getObjectName()
                    +", field:"+fieldError.getField());
            List<Topic> topicList = topicService.listTopic();
            model.addAttribute("topicList",topicList);
            return "post/editor";
        }

前端代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

<form:form action="publishPost.do" method="post" commandName="post">
            <input type="hidden" name="uid" value="${post.uid}">
            <input type="hidden" name="pid" value="${post.pid}">
            <%--<input type="hidden" name="user.uid" value="${post.uid}">--%>
            <input type="hidden" name="action" value="${action}">
            <div class="pub-header"><span></span>&nbsp;话题发布</div>
            <div class="pub-title">
                <form:input path="title" placeholder="标题:一句话说明你遇到的问题或想分享的经验"/>
                <form:errors path="title" cssClass="has-error" element="div"/>
                ${error}
            </div>
            <div class="pub-topic">
                <span>分类:</span>
                <div class="topic-list">
                    <form:select path="tid">
                        <form:option value="0">--请选择--</form:option>
                        <c:forEach items="${topicList}" var="topic">
                            <option value="${topic.tid}" title="${topic.tid}"${topic.tid eq post.tid?‘selected‘:‘‘}>${topic.name}</option>
                        </c:forEach>
                    </form:select>
                    <form:errors path="tid" cssClass="has-error" element="div"/>
                </div>
            </div>

            <div class="pub-textarea">
                <div style="width: 920px;">
                    <form:textarea path="content" id="textarea" cssStyle="height: 300px;max-height: 1000px;"></form:textarea>
                    <form:errors path="content" cssClass="has-error" element="div"/>
                </div>
                <button class="pub-button">发布</button>
            </div>
            </form:form>

效果

参考内容:

https://blog.csdn.net/w_linux/article/details/80585468

https://stackoverflow.com/questions/1384968/is-there-an-implementation-of-jsr-303-bean-validation-available

https://stackoverflow.com/questions/1384968/is-there-an-implementation-of-jsr-303-bean-validation-available

原文地址:https://www.cnblogs.com/passedbylove/p/11395911.html

时间: 2024-11-03 22:02:07

SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)的相关文章

在系统中使用Bean Validation验证参数

转自:http://www.importnew.com/18561.html 为什么要使用Bean Validation? 当我们实现某个接口时,都需要对入参数进行校验.例如下面的代码 1 2 3 4 5 public String queryValueByKey(String parmTemplateCode, String conditionName, String conditionKey, String resultName) {         checkNotNull(parmTem

SpringMVC中使用bean来接收form表单提交的参数时的注意点

这是前辈们对于SpringMVC接收表单数据记录下来的总结经验: SpringMVC接收页面表单参数 springmvc请求参数获取的几种方法 下面是我自己在使用时发现的,前辈们没有记录的细节和注意点: 使用bean来接收form表单提交的参数时,pojo中必须含有默认的(即空的)构造函数,同时,需要设置到bean中的变量必须有setter方法. 注:以下代码均为示例代码,非本人实际运行代码,请自行补充. 例如:我有一个bean类是User,具有变量username和password.同时,表单

JSR 303 - Bean Validation 介绍及最佳实践

JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案.2009 年 12 月 Java EE 6 发布,Bean Validation 作为一个重要特性被包含其中.本文将对 Bean Validation 的主要功能进行介绍,并通过一些示例来演示如何在 Java 开发过程正确的使用 Bean Validation. 1 评论: 安 大鹏, 软件工程师, IBM 杨 乐, 软件工程师, IBM 翁 志弘, 软件工程师, IBM 2011 年

SpringMVC中的 JSR 303 数据校验框架说明

JSR 303 是java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0中. JSR 303 通过在Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则, 并通过标准的验证接口对Bean进行验证: --------------------------------------------------------------------------- 注解 说明 ---------------------------------------------

JSR 303 - Bean Validation 是什么?

关于 Bean Validation JSR 303 - Bean Validation 是jree6 中的一项子规范,JSR 303 - Bean Validation着重解决以下实际问题: 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必 须要考虑和面对的事情.应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的.在通常的情况下,应用程序是分层的,不同的层由不同的开发人 员来完成.很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题,比如说

JSR 303 - Bean Validation 简介及使用方法

一.JSR-303简介 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernate ORM 没有任何关系. JSR 303 用于对 Java Bean 中的字段的值进行验证. Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证. 注:可以使用注解的方式进行验证 二.准备校验时使用的JAR validation-api-1.0.

使用JSR 303和AOP简化你的接口开发

本文出处:http://blog.csdn.net/chaijunkun/article/details/44854071,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文. 前言 如今互联网项目都采用HTTP接口形式进行开发.无论是Web调用还是智能设备APP调用,只要约定好参数形式和规则就能够协同开发.返回值用得最多的就是JSON形式.服务端除了保证正常的业务功能,还要经常对传进来的参数进行验证,例如某些参数不能为空,字符串必须含有可见字符,数值

Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC

Bean Validation 1.1当前实现是Hibernate validator 5,且spring4才支持.接下来我们从以下几个方法讲解Bean Validation 1.1,当然不一定是新特性: 集成Bean Validation 1.1到SpringMVC 分组验证.分组顺序及级联验证 消息中使用EL表达式 方法参数/返回值验证 自定义验证规则 类级别验证器 脚本验证器 cross-parameter,跨参数验证 混合类级别验证器和跨参数验证器 组合多个验证注解 本地化 因为大多数时

SpringMVC集成Bean Validation 1.1

1.集成Bean Validation 1.1到SpringMVC 1.1.项目搭建 所需的jar包: hibernate-validator-5.2.4.Final.jar validation-api-1.0.0.GA.jar slf4j-api-1.7.5.jar 首先添加hibernate validator 5依赖: Java代码   <dependency> <groupId>org.hibernate</groupId> <artifactId>