Java框架学习:SpringMVC之参数注入、数据校验

本文详细介绍了SpringMVC中的参数注入,包括基本数据类型、过滤器解决中文乱码问题、引用数据类型、类型转换以及数组、集合的注入。接着,文章深入探讨了SpringMVC如何简化数据校验,讲解了JSR 303规范中的注解,如自定义错误信息、将错误信息发送到前端、数据回显和分组校验的实现方式。通过实例展示了如何在Java项目中有效实施和优化数据验证。
摘要由CSDN通过智能技术生成

参数注入

基本数据类型

如果处理器中的方法test1中参数的名称与表单中对应表单项的name属性相同时,SpringMVC会自动将数据类型转换并实现注入

index.jsp代码

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
	<body>
	    <form action="<%=basePath%>test1" method="post">
	        name:<input type="text" name="name"/><br>
	        age:<input type="text" name="age"/><br>
	        sex:<input type="radio" name="sex" value="true"/><input type="radio" name="sex" value="false"/><br>
	        <input type="submit" value="提交"/>
	    </form>
	</body>
</html>

处理器UserController

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
public class UserController {
   
    @RequestMapping("/test1")
    public String test1(String name,int age,boolean sex){
   
    	//输出的值为表单中提交的值
        System.out.println(name);
        System.out.println(age);
        System.out.println(sex);
        return "index";
    }
}

如果test1方法中参数的名称与表单中对应表单项的name属性不相同时,需要设置@RequestParam注解的value属性值来实现参数注入

@RequestMapping("/test1")
//required可以指定请求是否一定要携带该参数,值为true代表必须携带该参数。
public String test1(@RequestParam(value = "name",required = false) String username,int age,boolean sex){
   
    System.out.println(name);
    System.out.println(age);
    System.out.println(sex);
    return "index";
}
一些注意细节:
在实体类User中的成员变量如果为基本数据类型,最好使用其包装类。
因为使用包装类默认值为null,将其转换为JSON字符串输出时,为null的数据不会输出;
如果使用基本数据类型,那么会存在默认值,当前台没有提交数据时,后台还是会输出其默认值
过滤器解决中文乱码问题

如果前台提交的数据中存在中文,可以在web.xml中配置过滤器解决这个问题

<!--注意filter配置需要位于servlet配置前面,否则会报错-->
<!--CharacterEncodingFilter是Spring提供的编码字符集过滤器,用于解决POST提交方式中的乱码问题-->
<filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
引用数据类型

如果处理器中的方法test2中参数user的成员变量名称与表单中对应表单项的name属性相同时,SpringMVC会自动将数据类型转换并实现注入。

处理器UserController

import com.alibaba.fastjson.JSON;
import com.young.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
public class UserController {
   
    @RequestMapping("/test2")
    public String test2(User user){
   
        System.out.println(JSON.toJSONString(user,true));
        return "index";
    }
}

实体类User

public class User {
   
    private String name;
    private Integer age;
    private Boolean sex;

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public Integer getAge() {
   
        return age;
    }

    public void setA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值