@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”字符串