这里使用的是在前台发起请求Handler,后台伪造数据响应给前台,
解决方案:将之前的viewResolver抹掉,配置对应(request)请求的Handler信息如下
之前Handler返回的都直接就是逻辑视图名,并且需要配置相对应的固定的视图解析器,不太方便,这次需要返回Object,使Handler更灵活。
既然return 之后的值不再是逻辑视图名称了,那么就让@ResponseBody来帮忙吧
这里有两个新的注解:
@RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。
@ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。
HttpMessageConverter接口,需要开启<mvc:annotation-driven />。
AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合 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请求的。不用指定返回视图信息。