您的位置:首页 > 编程语言 > Java开发

Spring注解@ResponseBody

2015-12-30 17:04 411 查看
SpringMVC层跟JSon结合,几乎不需要做什么配置,代码实现也相当简洁。再也不用为了组装协议而劳烦辛苦了!

Spring 3.X系列增加了新注解@ResponseBody

@ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。

HttpMessageConverter接口,需要开启<mvc:annotation-driven
/>。

AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合
List<HttpMessageConverter>

引用

ByteArrayHttpMessageConverter

StringHttpMessageConverter

ResourceHttpMessageConverter

SourceHttpMessageConverter

XmlAwareFormHttpMessageConverter

Jaxb2RootElementHttpMessageConverter

MappingJacksonHttpMessageConverter

可以理解为,只要有对应协议的解析器,你就可以通过几行配置,几个注解完成协议——对象的转换工作!



PS:Spring默认的json协议解析由Jackson完成。

主要需要spring-webmvc、jackson-mapper-asl两个包,其余依赖包Maven会帮你完成。至于log4j,我还是需要看日志嘛。




作用:

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:

返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

案例

需求分析:需要 利用 out 对象返回给财付通是否接收成功 。那么将需要如下代码:

[java] view
plaincopy





/**

* 返回处理结果给财付通服务器。

* @param msg: Success or fail。

* @throws IOException

*/

public void sendToCFT(String msg) throws IOException {

String strHtml = msg;

PrintWriter out = this.getHttpServletResponse().getWriter();

out.println(strHtml);

out.flush();

out.close();



}

那么在Controller中的方法若用此方法注解

[java] view
plaincopy





//财付通返回URL

@ResponseBody

@RequestMapping("/pay/tenpay")

public String tenpayReturnUrl(HttpServletRequest request, HttpServletResponse response) throws Exception {

unpackCookie(request, response);

payReturnUrl.payReturnUrl(request, response);

return "pay/success";

}

@ResponseBody

作用:

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:

返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

那么只需删除注解:@ResponseBody 便可以返回页面pay/success.jsp。而且达到了与客户端后台交互的效果。即:

[java] view
plaincopy





out.println(strHtml);

且不会在页面上输出字符串。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: