SpringMVC请求参数绑定

1、RequestParam 

  • value:指定请求参数名称
  • required:指定请求参数是否必须包括,默认为true,提交无此参数则报错
  • defaultValue:当没有指定请求参数时,则使用指定的默认值赋值

事例:

 @RequestMapping("/quick9")
    @ResponseBody
    public UserInfo Test9(@RequestParam(value = "name", required = false, defaultValue = "zhangsan") String username) {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setUserName(username);
        userInfo.setPassword("123456");
        return userInfo;
    }

2、PathVariable :获取Restful风格的参数

  • value:指定请求参数名称
  • required:指定请求参数是否必须包括,默认为true,提交无此参数则报错

事例:

 @RequestMapping("/quick10/{name}")
    @ResponseBody
    public UserInfo Test10(@PathVariable(value = "name", required = false) String username) {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setUserName(username);
        userInfo.setPassword("123456");
        return userInfo;
    }

3、Converter:自定义类型转换

代码代码:

/**
 *  定义自定义的类型转化
 */
public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = null;
        try {
            parse = dateFormat.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return parse;
    }
}


Spring-MVC.xml配置文件:

<!--转换器声明-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.itcast.converter.DateConverter"></bean>
            </list>
        </property>
    </bean>
<!-- 注入转换器 -->

<mvc:annotation-driven conversion-service="conversionService"/>

4、RequestBody:获取Ajax请求参数信息

 @RequestMapping(value = "/quick12",method = RequestMethod.POST)
 @ResponseBody
 public UserInfo Test12(@RequestBody UserInfo userInfo) {
        System.out.println(userInfo);
        return userInfo;
    }

使用Ajax 过程中会引入js文件,但单纯的引入js文件并不能进行访问需要在Spring-mvc.xml中进行相应的配置

 <!--  资源访问授权  -->
    <!--  1、指定文件夹  -->
    <!--    <mvc:resources mapping="/js/**" location="/js/"/>-->
    <!--  2、授权所有文件夹  -->
    <mvc:default-servlet-handler/>

5、Form表单提交

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>提交</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/quick12" method="post">
    姓名:<input type="text" name="UserName"/>
    年龄:<input type="text" name="Password">
    <input type="text" name="Id" value="1">
    <input type="submit" value="提交"/>
</form>

</body>
</html>
 @RequestMapping(value = "/quick12",method = RequestMethod.POST)
    @ResponseBody
    public UserInfo Test12(UserInfo userInfo) {
        System.out.println(userInfo);
        return userInfo;
    }

 

注意事项:

1、在Post请求中,传入参数发生乱码。需要在Web.xml文件中配置编码过滤器。

   <!--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>

2、表单提交如果需要提交集合类型 则 设置文本的name ="集合参数名[下标].属性名"来进行标识,后台则使用对象将集合类型包装起来接收即可。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>提交</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/quick13" method="post">
    姓名:<input type="text" name="userInfos[0].UserName"/>
    年龄:<input type="text" name="userInfos[0].Password">
    <input type="text" name="userInfos[0].Id" value="1"><br/>
    姓名:<input type="text" name="userInfos[1].UserName"/>
    年龄:<input type="text" name="userInfos[1].Password">
    <input type="text" name="userInfos[1].Id" value="2">
    <input type="submit" value="提交"/>
</form>

</body>
</html>
 @RequestMapping(value = "/quick13",method = RequestMethod.POST)
    @ResponseBody
    public UserVo Test13(UserVo user) {
        System.out.println(user);
        return user;
    }

最后为完整的实体信息

public class UserInfo {
    private Integer Id;
    private String UserName;
    private String Password;


    public Integer getId() {
        return Id;
    }

    public void setId(Integer id) {
        Id = id;
    }

    public String getUserName() {
        return UserName;
    }

    public void setUserName(String userName) {
        UserName = userName;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "Id=" + Id +
                ", UserName='" + UserName + '\'' +
                ", Password='" + Password + '\'' +
                '}';
    }
}

public class UserVo {
    public List<UserInfo> getUserInfos() {
        return userInfos;
    }

    public void setUserInfos(List<UserInfo> userInfos) {
        this.userInfos = userInfos;
    }

    private List<UserInfo> userInfos;

    @Override
    public String toString() {
        return "UserVo{" +
                "userInfos=" + userInfos +
                '}';
    }
}

祝语:一分耕耘,一分收获。积累更多的知识攀登更高的山峰。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值