spring mvc 第三天【注解实现springmvc Handler返回值为Object 的配置】

这里使用的是在前台发起请求Handler,后台伪造数据响应给前台,

解决方案:将之前的viewResolver抹掉,配置对应(request)请求的Handler信息如下

之前Handler返回的都直接就是逻辑视图名,并且需要配置相对应的固定的视图解析器,不太方便,这次需要返回Object,使Handler更灵活。

既然return 之后的值不再是逻辑视图名称了,那么就让@ResponseBody来帮忙吧

这里有两个新的注解:

@RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。

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

HttpMessageConverter接口,需要开启<mvc:annotation-driven  />。 
AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdaptergetMessageConverts()方法来获取转换器的一个集合 List<HttpMessageConverter> 

List<HttpMessageConverter> 

引用
ByteArrayHttpMessageConverter 
StringHttpMessageConverter 
ResourceHttpMessageConverter 
SourceHttpMessageConverter 
XmlAwareFormHttpMessageConverter 
Jaxb2RootElementHttpMessageConverter 
MappingJacksonHttpMessageConverter

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

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

 1 @Controller
 2 public class MyController {
 3    //处理器方法
 4     @RequestMapping(value="/first.do")
 5     @ResponseBody
 6     public Object doFirst(){
 7         return 1;
 8     }
 9       
10     //处理器方法-----String
11     @RequestMapping(value="/second.do",produces="text/html;charset=utf-8")
12     @ResponseBody
13     public Object doSecond(){
14         
15         return "汉字";
16     }
17     
18     
19     //处理器方法-----UserInfo
20         @RequestMapping(value="/third.do")
21         @ResponseBody
22         public Object doThird(){
23             UserInfo info=new UserInfo();
24             info.setAge(12);
25             info.setName("Happy");
26             return info;
27         }
28         
29         //处理器方法-----map
30         @RequestMapping(value="/four.do")
31         @ResponseBody
32         public Object doFour(){
33             UserInfo info=new UserInfo();
34             info.setAge(12);
35             info.setName("Happy");
36             
37             
38             Map<String,UserInfo> map=new HashMap<String,UserInfo>();
39             map.put("info", info);
40             return map;
41         }
42         
43         //处理器方法-----list
44         @RequestMapping(value="/five.do")
45         @ResponseBody
46         public Object doFive(){
47             UserInfo info=new UserInfo();
48             info.setAge(12);
49             info.setName("Happy");
50         
51         
52         List<UserInfo> list=new ArrayList<UserInfo>();
53          list.add(info);
54             return list;
55         }
56 }

上面的这些Handler都是适用于ajax请求的。不用指定返回视图信息。

原文地址:https://www.cnblogs.com/john69-/p/6087461.html