@RestController=@Controller+@ResponseBody

1.使用RestController时,返回到前端的内容是Return里的内容,无法返回jsp/html等页面,

此时的在application-spring.xml的配置文件中,不需要配置视图解析器

1  <!-- 3.配置jsp 显示ViewResolver -->
2 <bean id="viewResolver"
3           class="org.springframework.web.servlet.view.UrlBasedViewResolver">
4         <property name="viewClass"
5                   value="org.springframework.web.servlet.view.JstlView" />
6         <property name="prefix" value="/WEB-INF/jsp/" />
7         <property name="suffix" value=".jsp" />
8 </bean>

注释:视图解析器会根据控制层返回的字符串进行解析,如果返回的是return "hello",经过解析器会自动加上前缀和后缀,变成/WEB-INF/view/hello.jsp。

2.如果需要返回指定页面,可使用@Controller,配合上述的视图解析器, 如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

@responsebody表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中响应给客户端。比如异步获取json数据,加上@responsebody后,会直接返回json数据。使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

 1 //控制层,使用controller
 2 @RequestMapping(value="/request")
 3 @ResponseBody
 4 public String test(){
 5    
 6     String str = "responseBody";
 7     return str;
 8 }
 9 
10 //前台
11 $.ajax({
12    type:"post",
13    url :"/request",
14    dataType:"JSON",
15    success:function(resp){
16         if(resp){
17             console.log(resp);
18         }
19    }
20 });

最后在控制台会输出“responseBody”字符串

posted on 2019-09-08 14:05  小白coder  阅读(249)  评论(0编辑  收藏  举报