天天看点

【framework】spring3-mvc实例-信息转换

前言

这次主要讲讲 消息转换:一次请求,从请求页面--后台数据处理--返回响应内容.

主要涉及以下几个部分

请求Content-Type:

 1. text/plain

 2. application/json

 3. application/xml

 4. application/x-www-form-urlencoded

 请求正文:(都可以理解为string) 

 1. 普通string 

 2. json格式

 3. xml格式

Controller接收 

 1. String

 2. Bean

响应Content-Type:

 1. text/plain 

 2. application/x-www-form-urlencoded

 3. application/application+xml

相关流程和转换原理,单独开一篇博文写. 

具体实例

我们讲解的项目是spring-mvc-showcase,如果你有疑问可以参考spring3-mvc的开篇。

该java文件

在包(pkg):  org.springframework.samples.mvc.messageconverters

类名为: MessageConvertersController 

 我抽取部分代码进行讲解

1.   最简单的string请求和响应

第一部分:java代码

@RequestMapping(value="/string", method=RequestMethod.POST)   

    public @ResponseBody String readString(@RequestBody String string) {   

        return "Read string '" + string + "'";   

    }  

这个方法需要注意的展开讲一下,其他大同小异

第二部分:jsp页面

html

<form id="readString" class="textForm" action="<c:url value="/messageconverters/string" />" method="post">   

      <input id="readStringSubmit" type="submit" value="Read a String" />   

</form> 

js(在js中,对submit时间做了重写)

$("form.textForm").submit(function(event) {   

        var form = $(this);   

        var button = form.children(":first");   

        $.ajax({ type: "POST", url: form.attr("action"), data: "foo", contentType: "text/plain", dataType: "text", success: function(text) { MvcUtil.showSuccessResponse(text, button); }, error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, button); }});   

        return false;   

    });  

注意:js用到了jquery,所以语法,并且在jsp中做了一定的封装如MvcUtil。

第三部分: 通过jsp发起请求,查看请求信息

<a href="http://yjplxq.blog.51cto.com/attachment/201208/31/4081353_1346432576GuKh.png"></a>

请求正文:

<a href="http://yjplxq.blog.51cto.com/attachment/201208/31/4081353_1346432577x9UN.png"></a>

由于注解@RequestBody 存在,String直接被获取,返回值应为Read string 'foo'(上一篇文章我们讲过@ResponseBody )

第四部分: 效果图

<a href="http://yjplxq.blog.51cto.com/attachment/201208/31/4081353_13464325785to3.png"></a>

 2. 从请求中数据,转换成bean,作为参数传入,再以bean作为返回值

@RequestMapping(value="/form", method=RequestMethod.POST)   

    public @ResponseBody String readForm(@ModelAttribute JavaBean bean) {   

        return "Read x-www-form-urlencoded: " + bean;   

    } 

3. map作为返回值

@RequestMapping(value="/form", method=RequestMethod.GET)   

    public @ResponseBody MultiValueMap&lt;String, String&gt; writeForm() {   

        MultiValueMap&lt;String, String&gt; map = new LinkedMultiValueMap&lt;String, String&gt;();   

        map.add("foo", "bar");   

        map.add("fruit", "apple");   

        return map;   

//注意:返回类型MultiValueMap  

4. 响应一个bean

@RequestMapping(value="/xml", method=RequestMethod.GET)   

    public @ResponseBody JavaBean writeXml() {   

        return new JavaBean("bar", "fruit");   

//注意:返回类型JavaBean  

几个注解

1. @RequestBody 

表示method的参数能够从HTTP请求的body中取得值

2. @ModelAttribute

(我给这个注解加了个红色,就是说,这个注解有点复杂,但别有压力)

@ModelAttribute可以用于方法或者方法参数

     2.1 @ModelAttribute用于方法(method)

一个@ModelAttribute用于方法之上表示这个方法增加一个或者多个model属性,这些方法支持同样的参数类型,但不能直接映射到请求上。所有的@ModelAttribute方法在@RequestMapping的方法之前被调用

     2.2 @ModelAttribute用于method参数

表示这个参数能够从model中检索出来,如果不存在与model里,这个参数首次实例化并且加入到model中。一旦存在于model中,这个参数字段会被填充,名字与绑定的请求参数中对应。例如本例中可能Bean有字段foo,则能够填充model

3. @Valid

@Valid注解不是spring的注解,所以需要加入如下配置:

&lt;mvc:annotation-driven/&gt; 

@Valid要求 必须符合输入要求,否则就提示400错误

小结

这次简单的阐述了一下请求格式与响应格式。包括string,bean,map.json,xml等多种方式,同时对一些注解做了简单介绍,但基本对理解本文核心内容能有一定帮助。

具体参考spring官方文档,或者关注本博客后面内容。

本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/978957,如需转载请自行联系原作者