`
yimeng528
  • 浏览: 188773 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Spring MVC的Web应用开发(8) - Convert

阅读更多

本文介绍SpringMVC中的Convert,Convert是我认为的SpringMVC最吸引人,最优雅的特性,下面通过例子程序领略一下:

Java代码 复制代码 收藏代码
  1. package org.springframework.samples.mvc.convert;   
  2.   
  3. import java.util.Collection;   
  4. import java.util.Date;   
  5.   
  6. import org.springframework.format.annotation.DateTimeFormat;   
  7. import org.springframework.format.annotation.DateTimeFormat.ISO;   
  8. import org.springframework.stereotype.Controller;   
  9. import org.springframework.web.bind.annotation.PathVariable;   
  10. import org.springframework.web.bind.annotation.RequestMapping;   
  11. import org.springframework.web.bind.annotation.RequestParam;   
  12. import org.springframework.web.bind.annotation.ResponseBody;   
  13.   
  14. @Controller  
  15. @RequestMapping("/convert/*")   
  16. public class ConvertController {   
  17.   
  18.     @RequestMapping("primitive")   
  19.     public @ResponseBody String primitive(@RequestParam Integer value) {   
  20.         return "Converted primitive " + value;   
  21.     }   
  22.   
  23.     // requires Joda-Time on the classpath   
  24.     @RequestMapping("date/{value}")   
  25.     public @ResponseBody String date(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date value) {   
  26.         return "Converted date " + value;   
  27.     }   
  28.        
  29.     @RequestMapping("collection")   
  30.     public @ResponseBody String collection(@RequestParam Collection<Integer> values) {   
  31.         return "Converted collection " + values;   
  32.     }   
  33.   
  34.     @RequestMapping("formattedCollection")   
  35.     public @ResponseBody String formattedCollection(@RequestParam @DateTimeFormat(iso=ISO.DATE) Collection<Date> values) {   
  36.         return "Converted formatted collection " + values;   
  37.     }   
  38.   
  39.     @RequestMapping("bean")   
  40.     public @ResponseBody String bean(JavaBean bean) {   
  41.         return "Converted " + bean;   
  42.     }   
  43.   
  44.     @RequestMapping("value")   
  45.     public @ResponseBody String valueObject(@RequestParam SocialSecurityNumber value) {   
  46.         return "Converted value object " + value;   
  47.     }   
  48.   
  49.     @RequestMapping("custom")   
  50.     public @ResponseBody String customConverter(@RequestParam @MaskFormat("###-##-####") String value) {   
  51.         return "Converted '" + value + "' with a custom converter";   
  52.     }   
  53.   
  54. }  
package org.springframework.samples.mvc.convert;

import java.util.Collection;
import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/convert/*")
public class ConvertController {

	@RequestMapping("primitive")
	public @ResponseBody String primitive(@RequestParam Integer value) {
		return "Converted primitive " + value;
	}

	// requires Joda-Time on the classpath
	@RequestMapping("date/{value}")
	public @ResponseBody String date(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date value) {
		return "Converted date " + value;
	}
	
	@RequestMapping("collection")
	public @ResponseBody String collection(@RequestParam Collection<Integer> values) {
		return "Converted collection " + values;
	}

	@RequestMapping("formattedCollection")
	public @ResponseBody String formattedCollection(@RequestParam @DateTimeFormat(iso=ISO.DATE) Collection<Date> values) {
		return "Converted formatted collection " + values;
	}

	@RequestMapping("bean")
	public @ResponseBody String bean(JavaBean bean) {
		return "Converted " + bean;
	}

	@RequestMapping("value")
	public @ResponseBody String valueObject(@RequestParam SocialSecurityNumber value) {
		return "Converted value object " + value;
	}

	@RequestMapping("custom")
	public @ResponseBody String customConverter(@RequestParam @MaskFormat("###-##-####") String value) {
		return "Converted '" + value + "' with a custom converter";
	}

}

 

逐一方法看过来:

1.

Java代码 复制代码 收藏代码
  1. @RequestMapping("primitive")   
  2. public @ResponseBody String primitive(@RequestParam Integer value) {   
  3.     return "Converted primitive " + value;   
  4. }  
	@RequestMapping("primitive")
	public @ResponseBody String primitive(@RequestParam Integer value) {
		return "Converted primitive " + value;
	}

@RequestParam自动获取URL提交的参数名为value的值并赋值到Integer value变量,

访问"http://localhost:8080/web/convert/primitive?value=1"

浏览器显示"Converted primitive 1"

 

2.

Java代码 复制代码 收藏代码
  1. // requires Joda-Time on the classpath   
  2. @RequestMapping("date/{value}")   
  3. public @ResponseBody String date(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date value) {   
  4.     return "Converted date " + value;   
  5. }  
	// requires Joda-Time on the classpath
	@RequestMapping("date/{value}")
	public @ResponseBody String date(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date value) {
		return "Converted date " + value;
	}

@PathVariable自动获取URL路径中date/后面的值,判断该值是否满足ISO.DATE的类型(yyyy-MM-dd),最后将这个字符串转成Date value,

访问"http://localhost:8080/web/convert/date/2012-03-30"

浏览器显示"Converted date Fri Mar 30 00:00:00 CST 2012"

 

3.

Java代码 复制代码 收藏代码
  1. @RequestMapping("collection")   
  2. public @ResponseBody String collection(@RequestParam Collection<Integer> values) {   
  3.     return "Converted collection " + values;   
  4. }  
	@RequestMapping("collection")
	public @ResponseBody String collection(@RequestParam Collection<Integer> values) {
		return "Converted collection " + values;
	}

如果提交了同名参数的多个值(例如html的多选框),这些值会自动的封装到Collection<Integer> values里,

访问"http://localhost:8080/web/convert/collection?values=1&values=2"  

浏览器显示"Converted collection [1, 2]"

 

4.

Java代码 复制代码 收藏代码
  1. @RequestMapping("formattedCollection")   
  2. public @ResponseBody String formattedCollection(@RequestParam @DateTimeFormat(iso=ISO.DATE) Collection<Date> values) {   
  3.     return "Converted formatted collection " + values;   
  4. }  
	@RequestMapping("formattedCollection")
	public @ResponseBody String formattedCollection(@RequestParam @DateTimeFormat(iso=ISO.DATE) Collection<Date> values) {
		return "Converted formatted collection " + values;
	}

访问"http://localhost:8080/web/convert/formattedCollection?values=2012-03-30&values=2012-12-25"

浏览器显示"Converted formatted collection [Fri Mar 30 00:00:00 CST 2012, Tue Dec 25 00:00:00 CST 2012]"

 

以上说的都是convert简单类型,下面讲解如何convert自定义的Java类,写一个JavaBean类,该类有几个属性:

Java代码 复制代码 收藏代码
  1. private Integer primitive;   
  2.   
  3. @DateTimeFormat(iso=ISO.DATE)   
  4. private Date date;   
  5.   
  6. @MaskFormat("(###) ###-####")   
  7. private String masked;   
  8.   
  9. // list will auto-grow as its dereferenced e.g. list[0]=value   
  10. private List<Integer> list;   
  11.   
  12. // annotation type conversion rule will be applied to each list element   
  13. @DateTimeFormat(iso=ISO.DATE)   
  14. private List<Date> formattedList;   
  15.   
  16. // map will auto-grow as its dereferenced e.g. map[key]=value   
  17. private Map<Integer, String> map;   
  18.   
  19. // nested will be set when it is referenced e.g. nested.foo=value   
  20. private NestedBean nested;  
	private Integer primitive;
	
	@DateTimeFormat(iso=ISO.DATE)
	private Date date;

	@MaskFormat("(###) ###-####")
	private String masked;

	// list will auto-grow as its dereferenced e.g. list[0]=value
	private List<Integer> list;

	// annotation type conversion rule will be applied to each list element
	@DateTimeFormat(iso=ISO.DATE)
	private List<Date> formattedList;

	// map will auto-grow as its dereferenced e.g. map[key]=value
	private Map<Integer, String> map;

	// nested will be set when it is referenced e.g. nested.foo=value
	private NestedBean nested;

注意到该JavaBean还嵌套了一个自定义的Java类NestedBean,该类的属性为:

Java代码 复制代码 收藏代码
  1. private String foo;   
  2.   
  3. private List<NestedBean> list;   
  4.   
  5. private Map<String, NestedBean> map;  
	private String foo;

	private List<NestedBean> list;
	
	private Map<String, NestedBean> map;

看一下详细用法:

 

5.

访问"http://localhost:8080/web/convert/bean?primitive=1"

浏览器显示"Converted JavaBean primitive=1"

 

6.

访问"http://localhost:8080/web/convert/bean?date=2012-03-30"

浏览器显示"Converted JavaBean date=Fri Mar 30 00:00:00 CST 2012"

 

7.

访问"http://localhost:8080/web/convert/bean?masked=(123)-456-7890"

浏览器显示"Converted JavaBean masked=(123) 456-7890"

 

8.

访问"http://localhost:8080/web/convert/bean?list[0]=1&list[1]=2"

浏览器显示"Converted JavaBean list=[1, 2]"

 

9.

访问"http://localhost:8080/web/convert/bean?formattedList[0]=2012-03-30&formattedList[1]=2012-12-25"

浏览器显示"Converted JavaBean formattedList=[Fri Mar 30 00:00:00 CST 2012, Tue Dec 25 00:00:00 CST 2012]"

 

10.

访问"http://localhost:8080/web/convert/bean?map[1]=a&map[2]=b"

浏览器显示"Converted JavaBean map={1=a, 2=b}"

 

11.

访问"http://localhost:8080/web/convert/bean?nested.foo=stephansun"

浏览器显示"Converted JavaBean nested=NestedBean foo=stephansun"

 

12.

访问"http://localhost:8080/web/convert/bean?nested.list[0].foo=stephansun"

浏览器显示"Converted JavaBean nested=NestedBean list=[NestedBean foo=stephansun]"

 

13.

访问"http://localhost:8080/web/convert/bean?nested.map[1].foo=stephansun"

浏览器显示"Converted JavaBean nested=NestedBean map={1=NestedBean foo=stephansun}"

 

14.

访问"http://localhost:8080/web/convert/value?value=1"

浏览器显示"Converted value object SocialSecurityNumber [value=1]"

 

15.

访问"http://localhost:8080/web/convert/custom?value=ab-cd-efgh"

浏览器显示"Converted 'ab-cd-efgh' with a custom converter"

分享到:
评论

相关推荐

    spring MVC数据绑定大全

    Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护的Web应用程序。在Spring MVC中,数据绑定是一项核心功能,它允许开发者将用户输入的数据与控制器中的对象属性进行关联,简化了数据处理的复杂性。...

    spring mvc3.1.0 日期自动转换

    Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护的Web应用程序。在Spring MVC 3.1.0版本中,它引入了许多改进和新特性,其中之一就是日期自动转换功能。日期自动转换使得开发者在处理HTTP请求参数时...

    spring mvc 接口

    Spring MVC 是 Spring Framework 的一个重要模块,它实现了 MVC(模型-视图-控制器)设计模式,帮助开发者构建易于维护和扩展的 Web 应用程序。在 Spring MVC 中,控制器负责接收用户请求,并决定调用哪个模型来处理...

    spring mvc+dwr环境配置

    在本篇配置手册中,我们将介绍如何在Spring MVC的环境下配置DWR环境,这包括web.xml的配置、创建dwr.xml文件、添加DWR的jar包、形成推送函数类以及在前台页面引入对应的JavaScript文件。 首先,web.xml的配置是整个...

    29 Spring MVC之类型转换Converter慕课专栏1

    而`Converter`则更适用于Web应用程序,尤其是Spring MVC,它能处理更复杂的HTTP请求数据到模型对象的转换。 总结来说,`ConversionService`是Spring MVC中处理类型转换的核心,它可以通过`Converter`、`...

    SpringMVC.zip

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。在Spring MVC中,开发者可以利用模型-视图-控制器(MVC)架构模式来分离业务逻辑、数据处理和...

    spring-boot-reference.pdf

    27.1. The “Spring Web MVC Framework” 27.1.1. Spring MVC Auto-configuration 27.1.2. HttpMessageConverters 27.1.3. Custom JSON Serializers and Deserializers 27.1.4. MessageCodesResolver 27.1.5. Static...

    dwr+spring 注解方式

    Spring框架则是一个广泛使用的全面的企业级应用开发框架,提供依赖注入、面向切面编程、事务管理等功能。将DWR与Spring整合,可以利用Spring的强大功能来管理和配置DWR组件,同时保持前后端交互的高效性。 在使用...

    MyEclipse Spring 入门教程

    接下来,我们引入Spring的MVC框架进行Web开发。在`web.xml`中配置DispatcherServlet,这是Spring MVC的前端控制器: ```xml &lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt; &lt;servlet-class&gt;org.springframework.web....

    基于Maven的Spring+SpringMVC+Mybatis的环境搭建

    &lt;artifactId&gt;spring-webmvc &lt;version&gt;5.3.9 &lt;groupId&gt;org.mybatis &lt;artifactId&gt;mybatis-spring &lt;version&gt;2.0.1 ``` #### 三、配置Spring+SpringMVC+Mybatis - **Spring配置**:通常在`...

    springmvc demo可运行

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本示例中,"springmvc demo 可运行" 提供了一个基础的 Spring ...

    深入理解Spring MVC的数据转换

    Spring MVC中的数据转换是一个非常重要的概念,它对整个Web应用程序的开发和维护产生了深远的影响。今天,我们将深入了解Spring MVC中的数据转换机制,并详细介绍相关的知识点。 一、数据绑定 在Spring MVC中,...

    如何在eclipse jee中创建Maven project并且转换为Dynamic web project

    - 添加Web应用所需的依赖,例如`javax.servlet`的`servlet-api`库,以及你的Web框架(如Spring MVC、Struts2等)。 - 确保在`&lt;packaging&gt;`标签内,将类型设置为`war`,表示这是一个Web应用项目。 3. **转换为...

    maven搭建SSM框架

    1. **Spring**:这是一个全面的企业级应用开发框架,提供依赖注入(DI)、面向切面编程(AOP)等功能,使得代码更加模块化和易于管理。 2. **Spring MVC**:Spring框架的一部分,用于处理Web请求,提供了模型-视图-...

    Myeclipse配置ssh开发环境图解

    - **Struts**:是一个基于 MVC(Model-View-Controller)设计模式的 Java Web 框架。Struts2(通常简称 Struts)是 Struts 的下一代版本,它提供了更为灵活且强大的功能来构建动态的 Web 应用程序。 - **Hibernate**...

    maven maven新建webproject步骤

    在开发Java Web应用程序时,Maven是一个非常重要的构建工具,它可以帮助我们管理项目的依赖、构建流程和打包。本文将详细讲解如何使用Maven创建一个新的Web项目,并调整项目结构以符合Maven的最佳实践。 首先,创建...

    eclipse 开发 ssh框架模板

    SSH(Struts2 + Spring + Hibernate)框架是Java Web开发中的一个流行组合,它提供了模型-视图-控制器(MVC)架构,并整合了强大的持久层框架Hibernate和业务层框架Spring。Eclipse作为一款强大的Java集成开发环境,...

Global site tag (gtag.js) - Google Analytics