广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用BindingResult 自定义错误信息
  • 653
分享到

使用BindingResult 自定义错误信息

2024-04-02 19:04:59 653人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录BindingResult 自定义错误信息前提概要基础框架配置文件和Java代码的修改在Controller方法中指定需要进行校验进行自定义校验在jsP页面上显示校验错误信息Bi

BindingResult 自定义错误信息

前提概要

spring mvc和FreeMarker整合的项目中,采用JSR-303验证框架,通过注解的方式进行数据验证

基础框架

  • MVC:Spring MVC 3
  • 视图:FreeMarker
  • 验证:Hibernate-validator实现

配置文件和Java代码的修改

在Spring MVC配置文件中添加配置

添加以下mvc的注解驱动配置,一切变成“自动化


<mvc:annotation-driven />  

在JavaBean中添加数据校验的注解

其中@Length、@email就是Hibernate-validator中的数据校验注解,还可以用javax.validation中的注解,比如@NotNull


public class SystemUser {  
    @Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间")  
    private String userName;   
    @Email(message = "比如输入正确的邮箱")  
    private String email;  
}  

在Controller方法中指定需要进行校验

首先,要在需要进行校验的Bean前面加上@Valid注解,告诉springMVC框架这个Bean需要进行校验;

同时,还要在需要校验的Bean前面加上@modelattribute注解,从而将Bean暴露给视图,并且指定名字,这有两个作用,第一是显示校验错误需要使用这个名字,第二个是返回原来的页面以后,前面输入的所有值还要显示出来;

其次,每个需要校验的Bean后面紧跟一个BindingResult,SpringMVC框架会将校验结果保存在它里面,通过hasErrors方法可以判断是否有校验错误;

最后,当返回到原页面以后,SpringMVC框架还会将所有校验错误信息保存在上下文中,供页面上取得校验错误,Spring提供了一套JSP自定义标签。


@RequestMapping(value = "/create.html", method = RequestMethod.POST)  
public String doCreateUser(  
        @Valid @ModelAttribute("userDetail") SystemUser user,  
        BindingResult bindingResult,  
        httpservletRequest request) {  
    // 如果有校验错误,返回添加用户的页面  
    if (bindingResult.hasErrors()) {  
        return "/user/create";  
    }        
    this.userService.createUser(user);  
    return "/user/list.html";  
}  

进行自定义校验

如果需要添加自定义校验,比如验证用户名是否已经被使用了,那么简单的注解自然无能为力,需要自己编码实现,如果校验失败,可以手动将自定义校验错误添加到BindingResult中。


@RequestMapping(value = "/user/create.html", method = RequestMethod.POST)  
public String doCreateUser(  
        @Valid @ModelAttribute("userDetail") SystemUser user,  
        BindingResult bindingResult,  
        HttpServletRequest request) {  
    // 如果有数据校验错误,返回添加用户的页面  
    if (bindingResult.hasErrors()) {  
        return "/user/create";  
    }    
    boolean isUserNameExist = this.userService.checkUserByUserName(user.getUserName());  
    // 如果用户名已存在,返回添加用户的页面  
    if (isUserNameExist) {  
        // 向BindingResult添加用户已存在的校验错误  
        bindingResult.rejectValue("userName", "该用户名已存在", "该用户名已存在");  
        return "/user/create";  
    }        
    this.userService.createUser(user);  
    return "/user/list.html";  
}

在JSP页面上显示校验错误信息

返回页面以后,SpringMVC框架将所有校验错误信息都放在了上下文中,可以自己去取出来,但是那样非常麻烦,不过没关系,Spring提供了一套自定义标签,可以方便的显示校验错误信息。

页面头部需要导入Spring的自定义标签库


<%@ taglib prefix="fORM" uri="http://www.springframework.org/tags/form" %>  

需要一次性显示全部校验错误

(commandName的值就是@modelattribute注解中指定的值)


<form:form commandName="userDetail"> 
<form:errors path="*" CSSStyle="color:red"></form:errors> 
</form:form> 

需要在对应输入框的后面显示单个校验错误

(通过path指定显示那个具体的校验错误,userDetail正是@modelattribute注解中指定的值,而点号后面则是指定显示Bean中哪个属性的校验错误)


<input type="text" name="userName" value="${userDetail.userName}" > 
<form:errors path="userDetail.userName" cssStyle="color:red"></form:errors> 
<input type="text" name="email" value="${userDetail.email}"> 
<form:errors path="userDetail.email" cssStyle="color:red"></form:errors> 

BindingResult错误返回显示失败

作为一个初学者经常犯低级错误,特别是没有老师的情况下。绊了一整天,不过找到原因了

如果redirect跳转回造成参数丢失

此时可以设置返回参数为Object


@RequestMapping(value = "/save", method = RequestMethod.POST)
public Object test(HttpServletRequest request, Model model, @Validated User user, BindingResult bindingResult)
throws Exception {
if (bindingResult.hasErrors()) {
return "user/save";
}
user.setVersion(0);
return new ModelAndView("redirect:/user/list");
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用BindingResult 自定义错误信息

本文链接: https://www.lsjlt.com/news/155262.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用BindingResult 自定义错误信息
    目录BindingResult 自定义错误信息前提概要基础框架配置文件和Java代码的修改在Controller方法中指定需要进行校验进行自定义校验在JSP页面上显示校验错误信息Bi...
    99+
    2022-11-12
  • laravel中如何用dingo API返回自定义错误信息
    本篇内容主要讲解“laravel中如何用dingo API返回自定义错误信息”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel中如何用dingo API返回自定义错误信息”吧!lara...
    99+
    2023-07-04
  • 基于Spring-Security自定义登陆错误提示信息
    目录一. 自定义实现二. 实现自定义登陆页面Spring-Security登陆表单提交过程那么异常一下是如何传递给前端的呢获取方式实现效果如图所示: 首先公布实现代码: 一. 自定...
    99+
    2022-11-12
  • spring boot中的404错误信息怎么进行自定义
    spring boot中的404错误信息怎么进行自定义?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。返回json@Bean public EmbeddedSer...
    99+
    2023-05-31
    springboot spring boo 400错误
  • ORACLE中如何自定义系统验证的错误信息
    这篇文章将为大家详细讲解有关ORACLE中如何自定义系统验证的错误信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在ADF应用中,生成的EO都会自动生成部分约束,如必填...
    99+
    2022-10-19
  • 使用MybatisPlus自定义模版中能获取到的信息
    目录使用MybatisPlus的AutoGenerator生成代码模版中能获取到哪些信息MybatisPlus遇到的坑1、导入依赖2、配置分页配置文件和数据源使用MybatisPlu...
    99+
    2022-11-13
  • 详解自定义SpringMVC的Http信息转换器的使用
    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制。使用系统默认配置的HttpMessageConverter进行解析,然后...
    99+
    2023-05-30
    springmvc 转化器
  • 如何使用Nginx定义Header头信息
    这篇文章主要介绍“如何使用Nginx定义Header头信息”,在日常操作中,相信很多人在如何使用Nginx定义Header头信息问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Nginx定义Header...
    99+
    2023-06-27
  • java使用枚举封装错误码及错误信息详解
    目录枚举封装错误码及错误信息用法如下封装返回结果类和枚举错误码枚举错误码封装返回结果类枚举封装错误码及错误信息 使用枚举类型来封装project中所需要的错误码和错误信息,十分方便。...
    99+
    2022-11-12
  • 如何使用MybatisPlus自定义模版中能获取到的信息
    这篇文章主要介绍“如何使用MybatisPlus自定义模版中能获取到的信息”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用MybatisPlus自定义模版中能获取到的信息”文章能帮助大家解决问...
    99+
    2023-06-30
  • 怎么使用PHP打印上传错误信息
    今天小编给大家分享一下怎么使用PHP打印上传错误信息的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、上传文件的常见错误在上...
    99+
    2023-07-05
  • 【Uniapp】高德地图的接入、定位、自定义标点与信息窗体使用
    一、前言 因为公司的业务需求,需要实现一个接入高德地图的数据大屏,并根据坐标实现地图标点渲染,自定义信息窗体,点击定位等功能。查阅高德地图官方文档时发现使用的是原生 JavaScript ,且网上 uniapp 接入使用的教程较少,我自...
    99+
    2023-08-30
    uni-app 前端 html5 css 经验分享 个人开发 前端框架
  • 怎么用db2cos监控db2diag中的特定错误信息并抓取相应的app信息
    这篇文章主要介绍了怎么用db2cos监控db2diag中的特定错误信息并抓取相应的app信息,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2022-10-19
  • shiro与spring security用自定义异常处理401错误
    目录shiro与spring security自定义异常处理401背景解决方案SpringBoot整合Shiro自定义filter报错No SecurityManager acces...
    99+
    2022-11-12
  • java使用枚举封装错误码及错误信息的示例分析
    这篇文章给大家分享的是有关java使用枚举封装错误码及错误信息的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。枚举封装错误码及错误信息使用枚举类型来封装project中所需要的错误码和错误信息,十分方便。...
    99+
    2023-06-22
  • shiro与spring security怎么用自定义异常处理401错误
    这篇文章主要介绍shiro与spring security怎么用自定义异常处理401错误,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!shiro与spring security自定义异常处理401背景现在是...
    99+
    2023-06-21
  • 微信小程序中使用 TDesign 自定义 TabBar
    文章目录 一、按照小程序官方文档配置 TabBar(app.json文件内)二、在小程序根目录(与 pages 平级)新建 custom-tab-bar(必须使用此名称) 文件夹三、右击 cu...
    99+
    2023-09-11
    微信小程序 tdesign 小程序
  • java错误找不到符号解决方法(引用自定义类)
    通常情况下,我们在编写java文件时,会有引用到自已定义的一些类,如果按通常的javac *.java的形式来编译会出现找不到符号的错误。(推荐:java视频教程)以下提供了两种方法,以供参考假如在d:/web/wsh下有a.java和b....
    99+
    2018-09-21
    java
  • 怎么使用django+celery+RabbitMQ自定义多个消息队列
    本篇内容主要讲解“怎么使用django+celery+RabbitMQ自定义多个消息队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用django+celery+RabbitMQ自定义多...
    99+
    2023-07-05
  • python PyQt5(自定义)信号与槽使用及说明
    目录1 定义信号2 定义槽函数3 连接信号与槽函数4 发射信号5 实例自定义参数的传递及实例lamdba表达式实例总结所谓PyQt5高级自定义信号与槽,指的就是我们可以以自己喜欢的方...
    99+
    2022-12-16
    python PyQt5 PyQt5信号 PyQt5槽使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作