SpringMVC的架构有什么优势?——表单和数据校验(四)

news2024/11/22 9:43:15

前言

在这里插入图片描述
「作者主页」:雪碧有白泡泡
「个人网站」:雪碧的个人网站
「推荐专栏」

java一站式服务
React从入门到精通
前端炫酷代码分享
★ 从0到英雄,vue成神之路★
uniapp-从构建到提升
从0到英雄,vue成神之路
解决算法,一个专栏就够了
架构咱们从0说
★ 数据流通的精妙之道★
★后端进阶之路★

请添加图片描述

文章目录

  • 前言
  • 表单数据绑定
    • 1. 表单数据绑定(Form Data Binding):
    • 2. 表单数据校验(Form Validation):
    • 3. 数据类型转换(Type Conversion):
  • 数据校验
    • 1. 数据校验(Data Validation):
    • 2. 配置校验器(Validator Configuration):
    • 3. 执行校验(Perform Validation):

在这里插入图片描述

表单数据绑定

Spring MVC提供了一种方便的机制来将表单数据绑定到JavaBean对象上,以便进行验证和处理。
表单数据绑定是Spring MVC框架中一种非常重要的机制,它允许开发者将HTTP请求中的表单数据自动绑定到JavaBean对象上,并进行验证和处理。这使得开发者能够更加方便地编写Web应用程序,同时减少了重复代码的数量。

下面我们将深入探讨Spring MVC表单数据绑定的核心概念和相应Java代码示例。

1. 表单数据绑定(Form Data Binding):

在Spring MVC框架中,我们可以使用@ModelAttribute注解将HTTP请求中的表单数据绑定到JavaBean对象上。

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/register")
    public ModelAndView register() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", new User());
        modelAndView.setViewName("register");
        return modelAndView;
    }

    @PostMapping("/register")
    public String createUser(@ModelAttribute("user") User user, BindingResult result) {
        if (result.hasErrors()) {
            return "register";
        }
        userService.saveUser(user);
        return "redirect:/user/login";
    }
}

在上面的示例中,我们定义了一个名为"register"的视图,并在GET请求中将一个新的User对象添加到ModelAndView对象中返回给前端。在POST请求中,我们使用@ModelAttribute注解来将HTTP请求中的表单数据绑定到User对象上,并使用BindingResult对象来验证表单数据。如果存在校验错误,则返回"register"视图;否则,我们将User对象保存到数据库中,并重定向到"/user/login"路径。

2. 表单数据校验(Form Validation):

在Spring MVC框架中,我们可以使用javax.validation和Spring Validation框架来对表单数据进行验证。

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/register")
    public ModelAndView register() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", new User());
        modelAndView.setViewName("register");
        return modelAndView;
    }

    @PostMapping("/register")
    public String createUser(@Valid @ModelAttribute("user") User user, BindingResult result) {
        if (result.hasErrors()) {
            return "register";
        }
        userService.saveUser(user);
        return "redirect:/user/login";
    }
}

在上面的示例中,我们在createUser()方法中使用@Valid注解标记User对象,并使用BindingResult对象来接收校验结果。如果存在校验错误,则返回"register"视图;否则,将User对象保存到数据库中,并重定向到"/user/login"路径。

3. 数据类型转换(Type Conversion):

在Spring MVC框架中,我们可以使用@InitBinder注解和WebDataBinder类来进行数据类型转换。

@Controller
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private OrderService orderService;

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

    @PostMapping("/create")
    public String createOrder(@ModelAttribute("order") Order order) {
        orderService.saveOrder(order);
        return "redirect:/order";
    }
}

在上面的示例中,我们使用@InitBinder注解来定义一个用于数据类型转换的方法,该方法将Date类型转换成指定格式的字符串。在createOrder()方法中,Spring MVC框架会自动将HTTP请求中的表单数据绑定到Order对象上,并根据需要进行数据类型转换。

通过以上的介绍,我们可以看出,表单数据绑定是Spring MVC框架中非常重要的一种机制,它允许开发者将HTTP请求中的表单数据自动绑定到JavaBean对象上,并进行验证和处理。只有深入理解表单数据绑定的概念,并熟练掌握相应的Java代码技巧,才能够在实际开发中灵活运用Spring MVC

数据校验

Spring MVC还提供了一种简单的机制来验证表单数据。通过使用注解或XML配置,可以轻松定义验证规则。
数据校验是Spring MVC框架中一种非常重要的机制,它允许开发者验证表单数据是否符合指定的规则。通过使用注解或XML配置,可以轻松定义验证规则。

下面我们将深入探讨Spring MVC数据校验的核心概念和相应Java代码示例。

1. 数据校验(Data Validation):

在Spring MVC框架中,我们可以使用javax.validation和Spring Validation框架来对表单数据进行验证。

public class User {
    @NotNull
    private String name;

    @Email
    private String email;

    @Size(min = 6, max = 20)
    private String password;

    // getters and setters
}

在上面的示例中,我们定义了一个名为User的JavaBean对象,并使用注解来标记每个属性的验证规则。例如,@NotNull注解用于验证name属性是否为空;@Email注解用于验证email属性是否符合Email格式;@Size注解用于验证password属性的长度是否在[min, max]范围内。

2. 配置校验器(Validator Configuration):

在Spring MVC框架中,我们可以使用LocalValidatorFactoryBean类来配置校验器。

@Configuration
public class ValidationConfig {
    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }

    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
        processor.setValidator(validator());
        return processor;
    }
}

在上面的示例中,我们定义了一个ValidationConfig配置类,并在其中定义了两个Bean:validator和methodValidationPostProcessor。其中,validator Bean返回一个LocalValidatorFactoryBean对象,用于创建校验器;methodValidationPostProcessor Bean返回一个MethodValidationPostProcessor对象,用于启用方法级别的校验功能。

3. 执行校验(Perform Validation):

在Spring MVC框架中,我们可以使用@Valid注解将表单数据绑定到JavaBean对象上,并自动执行数据校验。

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/register")
    public ModelAndView register() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", new User());
        modelAndView.setViewName("register");
        return modelAndView;
    }

    @PostMapping("/register")
    public String createUser(@Valid @ModelAttribute("user") User user, BindingResult result) {
        if (result.hasErrors()) {
            return "register";
        }
        userService.saveUser(user);
        return "redirect:/user/login";
    }
}

在上面的示例中,我们在createUser()方法中使用@Valid注解标记User对象,并使用BindingResult对象来接收校验结果。如果存在校验错误,则返回"register"视图;否则,将User对象保存到数据库中,并重定向到"/user/login"路径。

通过以上的介绍,我们可以看出,数据校验是Spring MVC框架中非常重要的一种机制,它允许开发者验证表单数据是否符合指定的规则。只有深入理解数据校验的概念,并熟练掌握相应的Java代码技巧,才能够在实际开发中灵活运用Spring MVC框架,构建高效、可靠、易于维护的Web应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/849326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt5.14.2+QtCreator+PDB 查看源码

1. 在Creator添加源码 2. 安装PDB文件 Qt下载时没有整合最新的PDB文件下载,如果没有安装PDB文件,即使安装了src也无法调试。 双击MaintenanceTool.exe->设置->资料档案库->临时资料档案库->添加按钮,添加如下下载源&#xff1a…

Android平台GB28181设备接入端如何实现多视频通道接入?

技术背景 我们在设计Android平台GB28181设备接入模块的时候,有这样的场景诉求,一个设备可能需要多个通道,常见的场景,比如车载终端,一台设备,可能需要接入多个摄像头,那么这台车载终端设备可以…

接口测试—Fiddler工具

文章目录 Fiddler 知识1. 导语2. 配置3. 常用命令面试题1. 利用Fiddler抓取android设备https请求 Fiddler 知识 未完待续 1. 导语 为什么要用Fiddler? 提高测试效率. 测试人员通过使用Fiddler自己调试接口,无需麻烦后台同学帮忙. 模拟多种测试环境. 可…

项目管理者联盟创始人宣晓锋受邀为第十二届中国PMO大会演讲嘉宾

项目管理者联盟创始人宣晓锋先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:项目集管理PgMP:升维项目管理认知与能力。大会将于8月12-13日在北京举办,敬请关注! 议题简要: 从组织战略…

【C语言题解】将一句话的单词进行倒置,标点不倒置。

题目描述:将一句话的单词进行倒置,标点不倒置。比如 “I like beijing.”,经过处理后变为:“beijing. like I”。 文章目录 原题目题目描述:输入描述:输出描述:题目链接: 整体思路分…

rv1126移植并部署自写手写数字识别模型

首先搭建好rknntoolkit以及rknpu环境 --> MNIST->https://github.com/warren-wzw/MNIST-pytorch.git 大致流程 生成rknn文件----------------------------------------------------------------------------------------- 1:进入docker docker run -t -i…

【工具插件类教学】电脑端移动端缩放大图自适应Simple Zoom

目录 简介 1.创建Canvas并设置 2.使用预制体Zoom 3.商店地址 简介 特点: •易于使用和高度可定制。 •支持鼠标(桌面)和触摸(移动)。 •指定最小和最大缩放的限制。 •缩放指针(鼠标/手指)或屏幕上预定义的自定义位置。 •变焦时使用夹紧/弹性变焦类型。 •定义缩…

【科研人 学生党】AI辅助学术论文阅读

【适合于学生党和科研人】写文章往往需要找到好的研究点和方向,但是这并不是一件容易的事情,往往需要阅读大量的文献,阅读文献是一个耗时耗力的过程,而且你阅读了也不一定能提取出重要观点和信息。因此,借助GPT帮我们提…

深入理解 this

文章目录 1. 理解 this2. 为了进一步理解 this,我们再看一个案例3. this 的注意事项和使用细节 1. 理解 this 什么是 this? java虚拟机会给每一个对象分配 this,代表当前对象,坦白的讲,要明白 this不是件容易的事,打一…

容器安全的常见风险与防护实践

运行在云平台上的容器产品,因为具备一个完整的可移植应用程序环境,能够帮助用户轻松地完成对应用程序的开关控制,提升应用程序的敏捷性,同时节约企业的IT建设成本。在巨大优势作用下,容器产品的采用率在2021年达到了新…

爬虫来介绍ChromeF12 谷歌开发者工具 -Network

了解网页基础(HTML、CSS、JavaScript) 了解HTTP基本原理 了解JSON格式 了解Ajax请求 了解爬虫基本原理 (一)、Chrome开发者工具面板概述 Elements 查找网页源代码HTML中的任一元素,手动修改任一元素的属性和样式且能实时在浏览器里面得到反馈。 比如我们在Event Listener…

UML-A 卷-知识考卷

UML-A 卷-知识考卷 UML有多少种图,请列出每种图的名字: 常用的几种UML图: 类图(Class Diagram):类图是描述类、接口、关联关系和继承关系的图形化表示。它展示了系统中各个类之间的静态结构和关系。时序…

WEB集群——负载均衡集群

目录 一、 LVS-DR 群集。 1、LVS-DR工作原理 2、LVS-DR模式的特点 3、部署LVS-DR集群 3.1 配置负载调度器(192.168.186.100) 3.2 第一台web节点服务器(192.168.186.103) 3.3 第二台web节点服务器(192.168.186.…

高温老化房软件使用教程

高温老化炉软件通常具有以下几个模块: 1. 参数设置模块:该模块用于设置高温老化炉的相关参数,包括温度、时间、压力等。用户可以通过输入框、滑动条或下拉菜单等方式设定参数,并将参数发送给高温老化炉。 2. 监控模块:…

认识http的方法、Header、状态码以及简单实现一个http的业务逻辑

文章目录 http的方法http状态码http重定向http常见Header实现简单业务逻辑Protocol.hppUtil.hppServer.hppServer.cc 效果 http的方法 方法说明支持的HTTP版本GET获取资源1.0/1.1POST传输实体主体1.0/1.1PUT传输文件1.0/1.1HEAD获得报文首部1.0/1.1DELETE删除文件1.0/1.1OPTIO…

Centos7.6安装mysql8.0.20

安装前 1.安装mysql前,需将系统自带的mariadb卸载。 [rootk8s01 ~]#  rpm ‐qa|grep mariadbmariadb‐libs.x86_643[rootk8s01 ~]#  rpm ‐e ‐‐nodeps mariadb‐libs.x86_643[rootk8s01 ~]#  rpm ‐qa|grep mariadb 2. 下载mysql8.0.20 [rootk8s-01…

【王树森】深度强化学习(DRL)课程笔记:P1 基本概念(含gym安装)

课程信息 课程主讲:王树森(史蒂文斯理工学院计算机科学系的终身制助理教授) 课程内容:基本概念、价值学习、策略学习、Actor-Critic方法、AlphaGo、Monte Carlo (蒙特卡洛) 课程资料:https://github.com/wangshusen/D…

【MATLAB第66期】#源码分享 | 基于MATLAB的PAWN全局敏感性分析模型(有条件参数和无条件参数)

【MATLAB第66期】#源码分享 | 基于MATLAB的PAWN全局敏感性分析模型(有条件参数和无条件参数) 文献参考 Pianosi, F., Wagener, T., 2015. A simple and efficient method for global sensitivity analysis based on cumulative distribution functions.…

python多线程及协程

目录 进程和线程 串行和并行 多线程编程 Thread类 创建线程参数 具体案例 继承Thread类 具体案例 线程池 具体案例 协程 协程的使用 协程函数写法 调用多个协程函数 main函数的写法 案例 进程和线程 进程:就是一个程序,运行在系统之上…

[每日习题]年终奖(动态规划) 迷宫问题(DFS+回溯)——牛客习题

hello,大家好,这里是bang___bang_,本篇记录2道牛客习题,年终奖(简单),迷宫问题(中等),如有需要,希望能有所帮助! 目录 1️⃣年终奖 2️⃣迷宫问…