GVKun编程网logo

spring MVC 参数绑定时日期类型自动转换器的用法(实现一个springmvc的日期类型转换器)

9

在本文中,我们将为您详细介绍springMVC参数绑定时日期类型自动转换器的用法的相关知识,并且为您解答关于实现一个springmvc的日期类型转换器的疑问,此外,我们还会提供一些关于JavaEE_M

在本文中,我们将为您详细介绍spring MVC 参数绑定时日期类型自动转换器的用法的相关知识,并且为您解答关于实现一个springmvc的日期类型转换器的疑问,此外,我们还会提供一些关于JavaEE_Mybatis_SpringMVC SpringMVC日期类型转换问题三大处理方法归纳、JavaEE_Mybatis_SpringMVC__Spring MVC中数据绑定之日期类型、JavaEE_Mybatis_SpringMVC_自定义的参数绑定,页面的日期类型传递到数据库中datetime、Spring MVC 参数绑定的有用信息。

本文目录一览:

spring MVC 参数绑定时日期类型自动转换器的用法(实现一个springmvc的日期类型转换器)

spring MVC 参数绑定时日期类型自动转换器的用法(实现一个springmvc的日期类型转换器)

package com.wdkedu.elpproduct.converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Logger;
import org.springframework.core.convert.converter.Converter;

public class String2DateConverter implements Converter<String, Date> {
	private static final Logger logger = Logger.getLogger(String2DateConverter.class);
	private String datePattern;
	
	public String2DateConverter(String datePattern) {
		this.datePattern = datePattern;
	}
	
	@Override
	public Date convert(String arg0) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern);
		dateFormat.setLenient(false);
		try {
			return dateFormat.parse(arg0);
		} catch (ParseException e) {
			logger.error("日期类型自动转换出错:", e);
		}
		return null;
	}

}

然后在 spring-mvc.xml 配置文件里添加如下配置:

<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
		<property name="converters">
			<list>
				<bean class="com.wdkedu.elpproduct.converter.String2DateConverter">
					<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
				</bean>
			</list>
		</property>
</bean>

 

JavaEE_Mybatis_SpringMVC SpringMVC日期类型转换问题三大处理方法归纳

JavaEE_Mybatis_SpringMVC SpringMVC日期类型转换问题三大处理方法归纳

原址: http://blog.csdn.net/chenleixing/article/details/45190371

前言

        我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后台实体类之间日期转换处理的问题了,说问题也不大,但很多人开发中经常会遇到这个问题,有时很令人头疼,有时间问题暴露的不是很明显,然后逐渐对问题进行跟踪,会发现是日期类型转换失败“映射”不到对应的持久类的日期属性上造成的,由此我还特意写过一篇博文:SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法。感兴趣的码农可以看一看,总结了常见造成springMVC出现“400 Bad Request”错误的七大原因,其中就有前台的字符串日期类型与后台的java日期类型匹配不上造成的。

       今天晚上呢,特意抽出宝贵的时间来总结归纳出一下解决这个问题的三大方法,分享给大家,以帮助更多像我一样的人。鄙人不才,如果过程中有讲解的不清或者不对的地方,还望认真阅读的您,留下你的宝贵意见或建议,以便您,我,还有大家更快更好的共同进步!

       好了,我们切入正题吧!

 

方法一:实体类中加日期格式化注解

[java]  view plain copy
  1. @DateTimeFormat(pattern = "yyyy-MM-dd")  
  2. private Date receiveAppTime;  

如上,在对应的属性上,加上指定日期格式的注解,本人亲自测试过,轻松解决问题!


需要 import org.springframework.format.annotation.DateTimeFormat; 

     转换函数位于spring-context.jar包中


方法二:控制器Action中加入一段数据绑定代码

[java]  view plain copy
  1. @InitBinder  
  2. public void initBinder(WebDataBinder binder) {  
  3. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  4. dateFormat.setLenient(false);  
  5. binder.registerCustomEditor(Date.classnew CustomDateEditor(dateFormat, true));   //true:允许输入空值,false:不能为空值  


方法三:实现一个全局日期类型转换器并进行配置

         此方法较为复杂,请详细查看本人的这篇博文:SpringMVC配置全局日期转换器,处理日期转换异常

 

附加方法四:适合页面把日期类型转换成字符串且JSP,Freemark页面

JSP模版引擎方法:

[java]  view plain copy
  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>   
  2. <fmt:formatDate value="${job.jobtime }" pattern="yyyy-MM-dd HH:mm:ss"/>  

Freemarker模版引擎方法:

[java]  view plain copy
  1. <input id="receiveAppTime" name="receiveAppTime" type="text" value="${(bean.receiveAppTime?string('yyyy-MM-dd'))!}" />  

 

OK了,完了,希望以上方法能帮助正在阅读的您!

转载请注明—作者:Java我人生(陈磊兴)   原文出处:http://blog.csdn.net/chenleixing/article/details/44708533

最后,认真看过的网友们,大神们,如有感觉我这个程序猿有哪个地方说的不对或者不妥或者你有很好的议或者建议或点子方法,还望您大恩大德施舍n秒的时间留下你的宝贵文字(留言),以便你,我,还有广大的程序猿们更快地成长与进步.......


 

 

JavaEE_Mybatis_SpringMVC__Spring MVC中数据绑定之日期类型

JavaEE_Mybatis_SpringMVC__Spring MVC中数据绑定之日期类型

数据绑定应该算是Spring MVC的特点之一吧~简单易用且功能强大,极大地简化了我们编程人员对于用户输入数据的接收及转换。

早先版本的Spring中的数据绑定完全都是基于PropertyEditor的。而Spring3中引入了Converter,用来替代PropertyEditor完成类型转换。

那么我们也依照这个顺序,先来讲讲基于传统的PropertyEditor来实现日期类型的数据绑定。


在Spring MVC中,我们可以通过WebDataBinder来注册自定义的PropertyEditor,从而添加对应的请求参数绑定。有两种方式:

1、使用@InitBinder注解@Controller中的方法 2、自定义WebBindingInitializer来提供一个全局的数据绑定规则。


1、使用@InitBinder注解

@InitBinder
  • public void initBinder(WebDataBinder binder){
  • binder.registerCustomEditor(Date.class, new DateEditor());
  • }

    1. public class DateEditor extends PropertyEditorSupport {
    2. @Override
    3. public void setAsText(String text) throws IllegalArgumentException {
    4. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    5. Date date = null;
    6. try {
    7. date = format.parse(text);
    8. } catch (ParseException e) {
    9. format = new SimpleDateFormat("yyyy-MM-dd");
    10. try {
    11. date = format.parse(text);
    12. } catch (ParseException e1) {
    13. e1.printStackTrace();
    14. }
    15. }
    16. setValue(date);
    17. }
    18. }

    这里我们将DateEditor提出来封装成一个类方便重用。

    另外这里有个try...catch的小妙用,就是首先以"yyyy-MM-dd HH:mm:ss"的形式来解析用户输入的参数,若解析失败则转以"yyyy-MM-dd"的形式来解析。这样的逻辑就可以同时处理"yyyy-MM-dd HH:mm:ss"和"yyyy-MM-dd"形式的日期数据,我想在一般的中文系统中,这两种形式应该是最常用的了吧。

    添加如上代码之后,@InitBinder所在的Controller就可以自动绑定日期类型的数据了,不过这仅仅是在该Controller中生效,若想在全局范围内生效的话,可以将@InitBinder注解所在的Controller定义为一个BaseController,其余Controller都继承这个Controller。当然还有另外的方法,若你有兴趣的话,请看2。


    2、自定义WebBindingInitializer

    1. public class MyWebBindingInitializer implements WebBindingInitializer {
    2. @Override
    3. public void initBinder(WebDataBinder binder, WebRequest request) {
    4. binder.registerCustomEditor(Date.class, new DateEditor());
    5. }
    6. }

    还是前面写的DateEditor,这么快又见面了,只不过注册的位置改变了,在WebBindingInitializer中注册的PropertyEditor是在全局范围内共享的。

    不过光这样还不够,还要将WebBindingInitializer注入到AnnotationMethodHandlerAdapter中。

    1. <bean
    2. class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    3. <property name="webBindingInitializer">
    4. <bean
    5. class="org.springframework.samples.petclinic.web.ClinicBindingInitializer" />
    6. </property>
    7. </bean>


    如果是用<mvc:annotation-driven />的童鞋,上面的配置就没效果了,而mvc命名空间也没提供如此细粒度的配置,怎么办呢?

    别怕,方法还是有的,我们可以通过一个自定义PostBeanProcessor来处理:

    1. @Override
    2. public Object postProcessBeforeInitialization(Object bean, String beanName)
    3. throws BeansException {
    4. if (bean instanceof RequestMappingHandlerAdapter) {
    5. RequestMappingHandlerAdapter adapter = (RequestMappingHandlerAdapter) bean;
    6. adapter.setWebBindingInitializer(new MyWebBindingInitializer());
    7. }
    8. return bean;
    9. }

    不过实际上<mvc:annotation-driven />默认就为我们提供了一个WebBindingInitializer——ConfigurableWebBindingInitializer

    而上面的方法则会覆盖默认的ConfigurableWebBindingInitializer,其实我们可以直接使用这个Bean来注册我们的PropertyEditor:

    1. @Override
    2. public Object postProcessBeforeInitialization(Object bean, String beanName)
    3. throws BeansException {
    4. if(bean instanceof ConfigurableWebBindingInitializer){
    5. ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) bean;
    6. initializer.setPropertyEditorRegistrar(new PropertyEditorRegistrar() {
    7. @Override
    8. public void registerCustomEditors(PropertyEditorRegistry registry) {
    9. registry.registerCustomEditor(Date.class, new DateEditor());
    10. }
    11. });
    12. }
    13. return bean;
    14. }

    这里需要说明一下,WebBindingInitializer中不仅仅能注册PropertyEditor,还能注册Converter,也就是下面的3


    3、使用ConverstionService

    Spring3新引入了Converter系统,而ConversionService则是一个Facade类,用来封装底层实现而对外提供便捷的类型转换。所以这里不能重用之间的DateEditor了,不过大致逻辑还是一样的。另外补充说明一下,Converter是处理任意两类型间的转换,而Formatter是处理字符串和另一类型之间的转换的。可以看出来,Formatter是一类特殊的Converter,并且在处理数据绑定时,Formatter比Converter更加合适。所以我们这里就用Formatter来做:

    1. public class DateFormatter implements Formatter<Date> {
    2. @Override
    3. public String print(Date object, Locale locale) {
    4. return null;
    5. }
    6. @Override
    7. public Date parse(String text, Locale locale) throws ParseException {
    8. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    9. Date date = null;
    10. try {
    11. date = format.parse(text);
    12. } catch (Exception e) {
    13. format = new SimpleDateFormat("yyyy-MM-dd");
    14. date = format.parse(text);
    15. }
    16. return date;
    17. }
    18. }

    这里我们只写String到Date的逻辑。然后需要将DateFormatter注册到一个ConversionService中,最后再将ConversionService注册到Spring MVC中。

    1. <bean id="conversionService"
    2. class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    3. <property name="formatters">
    4. <set>
    5. <bean class="com.test.common.core.DateFormatter"></bean>
    6. </set>
    7. </property>
    8. </bean>


    如果是用<mvc:annotation-driven />的童鞋,那么很简单,只需要:

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


    而未使用<mvc:annotation-driven />的童鞋,需要定义一个WebBindingInitializer(或者使用ConfigurableWebBindingInitializer),然后注入到RequestMappingHandlerAdapter中去:

    1. <bean
    2. class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    3. <property name="webBindingInitializer" ref="webBindingInitializer">
    4. </property>
    5. </bean>
    6. <bean id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
    7. <property name="conversionService" ref="conversionService"></property>
    8. </bean>

    此时可能有人会问,如果同时使用PropertyEditor和ConversionService,执行顺序是什么呢?内部首先查找PropertyEditor进行类型转换,如果没有找到相应的PropertyEditor再通过ConversionService进行转换。


    4、PropertyEditor的自动注册

    对了,这里再稍带提一下自动注册PropertyEditor,只需要将JavaBean和JavaBean名称+Editor这两个类放在同一包下,那么JavaBeans的基础结构会自动发现PropertyEditor的类,而无需你手动注册~

    JavaEE_Mybatis_SpringMVC_自定义的参数绑定,页面的日期类型传递到数据库中datetime

    JavaEE_Mybatis_SpringMVC_自定义的参数绑定,页面的日期类型传递到数据库中datetime

    项目代码:

    http://pan.baidu.com/s/1borjAur


    在JavaEE的 Mybatis_SpringMVC 框架中

    Springmvc支持对一般pojo类型的映射,只需要页面上的name属性与pojo中的属性相对应,则可完成映射。

    但对于java中的 import java.util.Date; Date 类型并不支持。前端的数据并不能直接映射到pojo中,此时需要我们自己定义一个转换器


    一般pojo属性映射:整套流程

    addItem.jsp

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    4. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
    5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    6. <html>
    7. <head>
    8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    9. <script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/My97DatePicker/WdatePicker.js"></script>
    10. <title>修改商品信息</title>
    11. </head>
    12. <body>
    13. <form id="itemForm" action="${pageContext.request.contextPath }/items/addItemsSubmit.action" method="post" >
    14. <input type="hidden" name="id" value="${itemsEx.id }"/>
    15. 新增商品信息:
    16. <table width="100%" border=1>
    17. <tr>
    18. <td>商品名称</td>
    19. <td><input type="text" name="name" value="${itemsEx.name }"/></td>
    20. </tr>
    21. <tr>
    22. <td>商品价格</td>
    23. <td><input type="text" name="price" value="${itemsEx.price }"/></td>
    24. </tr>
    25. <tr>
    26. <td>商品生产日期</td>
    27. <td><input type="text" name="createtime" value="${itemsEx.createtime}" οnfοcus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})"/></td>
    28. <!--
    29. <td><input type="text" name="createtime" value="<fmt:formatDate value="${itemsEx.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
    30. -->
    31. </tr>
    32. <%-- <tr>
    33. <td>商品图片</td>
    34. <td>
    35. <c:if test="${item.pic !=null}">
    36. <img src="/pic/${item.pic}" width=100 height=100/>
    37. <br/>
    38. </c:if>
    39. <input type="file" name="pictureFile"/>
    40. </td>
    41. </tr> --%>
    42. <tr>
    43. <td>商品简介</td>
    44. <td>
    45. <textarea rows="3" cols="30" name="detail">${itemsEx.detail }</textarea>
    46. </td>
    47. </tr>
    48. <tr>
    49. <td colspan="2" align="center"><input type="submit" value="提交"/>
    50. </td>
    51. </tr>
    52. </table>
    53. </form>
    54. </body>
    55. </html>


    controller

    1. @RequestMapping("/addItemsSubmit")
    2. public String editItemsSubmit(ItemsEx itemsEx) {
    3. try {
    4. itemsService.insertItems(itemsEx);
    5. } catch (Exception e) {
    6. e.printStackTrace();
    7. }
    8. return "redirect:queryItems.action";
    9. }


    pojo

    1. package cn.itcast.ssm.po;
    2. import java.util.Date;
    3. public class Items {
    4. private Integer id;
    5. private String name;
    6. private Float price;
    7. private String pic;
    8. private Date createtime;
    9. private String detail;
    10. public Integer getId() {
    11. return id;
    12. }
    13. public void setId(Integer id) {
    14. this.id = id;
    15. }
    16. public String getName() {
    17. return name;
    18. }
    19. public void setName(String name) {
    20. this.name = name == null ? null : name.trim();
    21. }
    22. public Float getPrice() {
    23. return price;
    24. }
    25. public void setPrice(Float price) {
    26. this.price = price;
    27. }
    28. public String getPic() {
    29. return pic;
    30. }
    31. public void setPic(String pic) {
    32. this.pic = pic == null ? null : pic.trim();
    33. }
    34. public Date getCreatetime() {
    35. return createtime;
    36. }
    37. public void setCreatetime(Date createtime) {
    38. this.createtime = createtime;
    39. }
    40. public String getDetail() {
    41. return detail;
    42. }
    43. public void setDetail(String detail) {
    44. this.detail = detail == null ? null : detail.trim();
    45. }
    46. }


    对于特殊的Date 的定义转换器;

    配置文件(springmvc.xml)进行如下配置:

    1. <!--注解映射器 -->
    2. <!-- <bean/> -->
    3. <!--注解适配器 -->
    4. <!-- <bean/> -->
    5. <!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
    6. mvc:annotation-driven默认加载很多的参数绑定方法,
    7. 比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
    8. 实际开发时使用mvc:annotation-driven
    9. -->
    10. <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

    1. <!-- 自定义参数绑定 -->
    2. <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    3. <property name="converters">
    4. <list>
    5. <!-- 进行日期的转换 -->
    6. <bean class="cn.itcast.ssm.controller.converter.CustomConverter"/>
    7. </list>
    8. </property>
    9. </bean>

    需要实现 org.springframework.format.support.FormattingConversionServiceFactoryBean 接口(spring-context-3.2.0 RELEASE.jar)

    实现类

    1. package cn.itcast.ssm.controller.converter;
    2. import java.text.ParseException;
    3. import java.text.SimpleDateFormat;
    4. import java.util.Date;
    5. import org.springframework.core.convert.converter.Converter;
    6. public class CustomConverter implements Converter<String, Date> {
    7. // 实现将日期串转换为日期类型
    8. @Override
    9. public Date convert(String source) {
    10. SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
    11. "yyyy-MM-dd HH:mm:ss");
    12. try {
    13. return simpleDateFormat.parse(source);
    14. } catch (ParseException e) {
    15. e.printStackTrace();
    16. }
    17. // 如果参数绑定失败,返回null
    18. return null;
    19. }
    20. }



    Spring MVC 参数绑定

    Spring MVC 参数绑定

    一、参数绑定注解介绍

    (1)Spring MVC 中绑定数据的注解介绍

            Spring MVC 中绑定数据的注解如下:

      1. @RequestParam     绑定单个请求数据,既可以是 URL 中的参数,也可以是表单提交的参数或上传的文件。

      2. @PathVariable    绑定 URL 中的参数值

      3. @CookieValue    绑定 Cookie 参数

      4. @RequestHeader    绑定 HTTP 请求头参数

      5. @ModelAttribute    绑定 Model 参数

      6. @SessionAttributes    绑定 Session 参数

      7. @RequestBody    请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

      8. @ResponseBody    将内容或对象作为 HTTP 响应正文返回,使用 @ResponseBody 将会跳过视图处理部分,而是调用适合 HttpMessageConverter,将返回值写入输出流。

      9. @RequestPart    绑定 “multipart/form-data” 参数。

    二、参数绑定注解详解

    (1)@RequestParam

            此注解用于绑定单个请求数据,既可以是 URL 中的参数,也可以是表单提交的参数或上传的文件。

            它有三个属性:value、defaultValue、required。

            value    用于设置参数名。

            defaultValue    用于对参数设置默认值。

            required    用于设置是否必需值,默认为 true。为 true 时,如果参数为空,会报错。

            demo1-post.jsp 代码如下所示:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP ''demo1-post.jsp'' starting page</title>
      </head>
      
      <body>
        <form method="post" action="/web/paramBind/demo1">
         <input type="text" name="username" value="zhangsan" />
         <input type="submit" value="提交" />
        </form>
      </body>
    </html>

            Controller 部分代码如下所示:

    @Controller
    @RequestMapping("/paramBind")
    public class ParamBindController {
    
     @RequestMapping(value={"/demo1-post"})
     public ModelAndView demo1(){
      ModelAndView modelAndView= new ModelAndView();
      modelAndView.setViewName("demo1-post");
      
      return modelAndView;
     }
    
     @RequestMapping(value={"/demo1"})
     public ModelAndView demo1(@RequestParam(value="username") String username,@RequestParam(value="id",defaultValue="1",required=false) Integer id){
      ModelAndView modelAndView= new ModelAndView();
      modelAndView.addObject("username", username);
      modelAndView.addObject("id", id);
      modelAndView.setViewName("demo1-success");
    
      return modelAndView;
     }
    
    }

            demo1-success.jsp 代码如下所示:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP ''demo1-success.jsp'' starting page</title>
     </head>
      
      <body>
        用户名为:${username}
        <br />
        Id为:${id}
      </body>
    </html>

            操作步骤和结果如下图所示:

    (2)@PathVariable

            此注解用于绑定 URL 中的参数值。它只有一个属性值 value。

            Controller 部分代码如下所示:

    @Controller
    @RequestMapping("/paramBind")
    public class ParamBindController {
    
     @RequestMapping(value={"/demo2/{id}"})
     public ModelAndView demo2(@PathVariable(value="id") Integer id){
      ModelAndView modelAndView= new ModelAndView();
      modelAndView.addObject("id", id);
      modelAndView.setViewName("demo2");
      
      return modelAndView;
     }
    
    }

            demo2.jsp 代码如下所示:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP ''demo2.jsp'' starting page</title>
      </head>
      
      <body>
        id值为:${id }
      </body>
    </html>

            运行结果如下图所示:

            

    (3)@CookieValue

            此注解用于绑定 Cookie 参数。

            Controller 部分代码如下所示:

    @Controller
    @RequestMapping("/paramBind")
    public class ParamBindController {
      
    // @CookieValue示例
     @RequestMapping(value={"/initCookie"})
     public ModelAndView initCookie(HttpServletResponse response){
      ModelAndView modelAndView= new ModelAndView();
      response.addCookie(new Cookie("coolieId""123456"));
      modelAndView.setViewName("demo3-initCookie");
      
      return modelAndView;
     }
     
     @RequestMapping(value={"/demo3"})
     public ModelAndView demo3(@CookieValue(value="coolieId",defaultValue="",required=false) String coolieId){
      ModelAndView modelAndView= new ModelAndView();
      modelAndView.addObject("coolieId", coolieId);
      modelAndView.setViewName("demo3");
      
      return modelAndView;
     }
    }

            在 /paramBind/initCookie 中设置 cookie,在 /paramBind/demo3 中读取 cookie。

            执行结果如下图所示:

            

    (4)@RequestHeader

            此注解用于绑定 HTTP 请求头参数。

            Controller 中部分代码如下所示:

    @Controller
    
    @RequestMapping("/paramBind")
    
    public class ParamBindController {
     
    // @RequestHeader示例
     @RequestMapping(value={"/demo4"})
     public ModelAndView demo4(@RequestHeader(value="User-Agent",defaultValue="",required=false) String userAgent){
      ModelAndView modelAndView= new ModelAndView();
      modelAndView.addObject("userAgent", userAgent);
      modelAndView.setViewName("demo4");
    
      return modelAndView;
     }
    
    }

            运行结果如下所示:

            

    (5)@ModelAttribute

            此注解用于绑定 Model 参数。Model 中数据的作用域是 Requets 级别的,也就是说在一个 Request 请求中是获取不到其它 Request 请求的 Model 的。

            首先创建一个 model,如 User.java,代码如下:

    package com.uni2uni.model;
    public class User {
     private Integer id;
     private String username;
     private String password;
     public Integer getId() {
      return id;
     }
     public void setId(Integer id) {
      this.id = id;
     }
     public String getUsername() {
      return username;
     }
     public void setUsername(String username) {
      this.username = username;
     }
     public String getPassword() {
      return password;
     }
     public void setPassword(String password) {
      this.password = password;
     }
    }

            Controller 的部分代码如下所示:

    @Controller
    @RequestMapping("/paramBind")
    public class ParamBindController {
     
    // @ModelAttribute示例
     @RequestMapping(value={"/demo5-post"})
     public String demo5post(){
      
      return "demo5-post";
     }
     
     @RequestMapping(value={"/demo5"},method={RequestMethod.POST})
     public String demo5(@ModelAttribute("user") User user){
      
      return "demo5";
     }
    }

            demo5-post.jsp 代码如下所示:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP ''demo1-post.jsp'' starting page</title>
      </head>
      
      <body>
        <form modelAttribute="user" method="post" action="/web/paramBind/demo5">
         <input type="text" name="username" value="zhangsan" />
         <input type="password" name="password" value="111" />
         <input type="submit" value="提交" />
        </form>
      </body>
    </html>

            demo5.jsp 代码如下所示:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
      </head>
      <body>
        用户名是:${user.username }
        <br/>
        密码是:${user.password }
      </body>
    </html>

            操作结果如下图所示:

    (6)@SessionAttributes

            此注解用于绑定 Session 参数。与其它注解不同的是,@SessionAttributes (value="sessionId") 是在 Controller 上加的。如下所示:

    @Controller
    @RequestMapping("/paramBind")
    @SessionAttributes(value="sessionId")
    public class ParamBindController {
    }

            设置 Session 的代码如下所示:

     @RequestMapping(value={"/initSession"})
     public String initSession(HttpServletRequest request){
      request.getSession().setAttribute("sessionId""111111");
      return "demo6-initSession";
     }

            demo6.jsp 代码如下所示:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
      </head>
      <body>
        Session的值为:${sessionId }
      </body>
    </html>

            执行结果如下图所示:

            

    (7)@RequestBody

            此注解用于将请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

    (8)@ResponseBody 

            将内容或对象作为 HTTP 响应正文返回,使用 @ResponseBody 将会跳过视图处理部分,而是调用适合 HttpMessageConverter,将返回值写入输出流。一般返回 json 或 xml。

            Controller 中部分代码如下所示:

     @RequestMapping(value={"/demo7"})
     public @ResponseBody User demo7(){
      User user= new User();
      user.setId(1);
      user.setUsername("zhangsan");
      user.setPassword("111");
     
      return user;
     }

            返回 Json 如下所示:

    {"id":1,"username":"zhangsan","password":"111"}

    (9)@RequestPart

            此注解用于绑定 “multipart/data” 参数。

    今天关于spring MVC 参数绑定时日期类型自动转换器的用法实现一个springmvc的日期类型转换器的介绍到此结束,谢谢您的阅读,有关JavaEE_Mybatis_SpringMVC SpringMVC日期类型转换问题三大处理方法归纳、JavaEE_Mybatis_SpringMVC__Spring MVC中数据绑定之日期类型、JavaEE_Mybatis_SpringMVC_自定义的参数绑定,页面的日期类型传递到数据库中datetime、Spring MVC 参数绑定等更多相关知识的信息可以在本站进行查询。

    本文标签:

    上一篇android – 在Volley中向NetworkImageView添加身份验证标头

    下一篇(二)archlinux 中的第一个容器(archlinux zsh)