Spring4.0系列3-@RestController

简介:

4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解。4.0之前的版本,spring MVC的组件都使用@Controller来标识当前类是一个控制器servlet。

 

使用这个特性,我们可以开发REST服务的时候不需要使用@Controller而专门的@RestController。

 

 

当你实现一个RESTful web services的时候,response将一直通过response body发送。为了简化开发,Spring 4.0提供了一个专门版本的controller。下面我们来看看@RestController实现的定义:

 

Java代码   收藏代码
  1. @Target(value=TYPE)  
  2.  @Retention(value=RUNTIME)  
  3.  @Documented  
  4.  @Controller  
  5.  @ResponseBody  
  6. public @interface RestController  

 

 

 

官方文档解释:

 

Java代码   收藏代码
  1. A convenience annotation that is itself annotated with @Controller and @ResponseBody. Types that carry this annotation are treated as controllers where @RequestMapping methods assume @ResponseBody semantics by default.  
  2. 注解本身使用@Controller@ResponseBody注解。使用了这个注解的类会被看作一个controller-使用@RequestMapping的方法有一个默认的@ResponseBody注解。  
  3. @ResponseBody – As of version 4.0 this annotation can also be added on the type level in which case is inherited and does not need to be added on the method level.  
  4. @ResponseBody也可以加到类一级,通过继承方法一级不需要添加。  

 

 

 

UserDetails.java

 

 

 

Java代码   收藏代码
  1. package javabeat.net.rest;  
  2.   
  3. import javax.xml.bind.annotation.XmlAttribute;  
  4. import javax.xml.bind.annotation.XmlRootElement;  
  5. @XmlRootElement  
  6. public class UserDetails {  
  7.     private String userName;  
  8.     private String emailId;  
  9.   
  10.     @XmlAttribute  
  11.     public String getUserName() {  
  12.         return userName;  
  13.     }  
  14.     public void setUserName(String userName) {  
  15.         this.userName = userName;  
  16.     }  
  17.   
  18.     @XmlAttribute  
  19.     public String getEmailId() {  
  20.         return emailId;  
  21.     }  
  22.     public void setEmailId(String emailId) {  
  23.         this.emailId = emailId;  
  24.     }  
  25. }  

 

 SpringRestControllerDemo.java

 

 

Java代码   收藏代码
  1. package javabeat.net.rest;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.http.HttpStatus;  
  5. import org.springframework.web.bind.annotation.RequestMapping;  
  6. import org.springframework.web.bind.annotation.RequestMethod;  
  7. import org.springframework.web.bind.annotation.ResponseStatus;  
  8. import org.springframework.web.bind.annotation.RestController;  
  9.   
  10. @RestController  
  11. public class SpringRestControllerDemo {  
  12.     @Autowired UserDetails userDetails;  
  13.     @RequestMapping(value="/springcontent",  
  14.             method=RequestMethod.GET,produces={"application/xml""application/json"})  
  15.     @ResponseStatus(HttpStatus.OK)  
  16.     public UserDetails getUser() {  
  17.         UserDetails userDetails = new UserDetails();  
  18.         userDetails.setUserName("Krishna");  
  19.         userDetails.setEmailId("krishna@gmail.com");  
  20.         return userDetails;  
  21.     }  
  22.   
  23.     @RequestMapping(value="/springcontent.htm", method=RequestMethod.GET)  
  24.     @ResponseStatus(HttpStatus.OK)  
  25.     public String getUserHtml() {  
  26.         //Test HTML view  
  27.         return "example";  
  28.     }  
  29. }  

 

 

 

 

 dispatcher-servlet.xml

 

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.   
  8. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
  9.   
  10.   
  11. http://www.springframework.org/schema/mvc  
  12.   
  13.   
  14. http://www.springframework.org/schema/mvc/spring-mvc.xsd  
  15.   
  16.   
  17. http://www.springframework.org/schema/context  
  18.   
  19.   
  20. http://www.springframework.org/schema/context/spring-context-4.0.xsd">  
  21.   
  22.     <context:component-scan base-package="com.infosys.rest" />  
  23.   
  24.     <bean id="userDetails" class="javabeat.net.rest.UserDetails"/>  
  25.     <mvc:annotation-driven content-negotiation-manager="contentManager"/>  
  26.     <bean id="contentManager"  
  27.                 class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">  
  28.                 <property name="favorPathExtension" value="true"/>  
  29.                 <property name="ignoreAcceptHeader" value="true" />  
  30.                 <property name="defaultContentType" value="text/html" />  
  31.                 <property name="useJaf" value="false"/>  
  32.                 <property name="mediaTypes">  
  33.                     <map>  
  34.                         <entry key="json" value="application/json" />  
  35.                         <entry key="html" value="text/html" />  
  36.                         <entry key="xml" value="application/xml" />  
  37.                     </map>  
  38.                 </property>  
  39.         </bean>  
  40.     <bean id="jspViewResolver"  
  41.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  42.         <property name="prefix" value="/WEB-INF/jsp/" />  
  43.         <property name="suffix" value=".jsp" />  
  44.     </bean>  
  45.   
  46. </beans>  
目录
相关文章
|
6月前
|
Java API 网络架构
深入理解 Spring Boot 中的 @RestController 注解:概念与实践
【4月更文挑战第20天】在现代Web开发中,创建RESTful服务已成为常态。Spring Boot通过提供@RestController注解,极大简化了REST API的开发过程。本篇博客旨在详细介绍@RestController的概念、优势以及在Spring Boot项目中的具体应用方法。
299 8
|
30天前
|
XML 前端开发 Java
【Spring】@RequestMapping、@RestController和Postman
【Spring】@RequestMapping、@RestController和Postman
22 2
【Spring】@RequestMapping、@RestController和Postman
|
JSON 前端开发 Java
Spring 注解之@RestController与@Controller的区别
Spring 注解之@RestController与@Controller的区别
174 0
|
JSON Java API
Spring Boot 中的 @RestController 注解是什么,原理,如何使用
Spring Boot 中的 @RestController 注解是什么,原理,如何使用
|
XML JSON 数据格式
SpringCloud @RestController返回值问题
SpringCloud @RestController返回值问题
|
XML JSON Java
Spring - Bean管理之注解(@Component、@Controller、@RestController、@Service、@Repository)
Spring - Bean管理之注解(@Component、@Controller、@RestController、@Service、@Repository)
470 0
Spring - Bean管理之注解(@Component、@Controller、@RestController、@Service、@Repository)
|
XML JSON 前端开发
说说Spring中的 @RestController 和 @Controller
说说Spring中的 @RestController 和 @Controller
306 0
说说Spring中的 @RestController 和 @Controller
|
Java Spring
简化 @RestController @RequestMapping ,自定义spring注解
简化 @RestController @RequestMapping ,自定义spring注解 @RestController @RequestMapping(value = "/mark") public class MarkController 这是我们经常看到的两个注解,每次都要写两行,为了提高速度,所以要封装一下这俩个注解。
1556 0
|
Java Spring 前端开发
【spring Boot】Spring中@Controller和@RestController之间的区别
spring Boot入手的第一天,看到例子中的@RestController ............. 相同点:都是用来表示Spring某个类的是否可以接收HTTP请求 不同点:@Controller标识一个Spring类是Spring MVC controller处理器     @RestController:  a convenience annotation that does nothing more than adding the@Controller and @ResponseBody annotations。
1420 0