zoukankan      html  css  js  c++  java
  • spring4.0之三:@RestController

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

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

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

    复制代码
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Controller
    @ResponseBody
    public @interface RestController {
    
        /**
         * The value may indicate a suggestion for a logical component name,
         * to be turned into a Spring bean in case of an autodetected component.
         * @return the suggested component name, if any
         * @since 4.0.1
         */
        String value() default "";
    
    }
    复制代码

    官方文档解释:

    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.  
    注解本身使用@Controller和@ResponseBody注解。使用了这个注解的类会被看作一个controller-使用@RequestMapping的方法有一个默认的@ResponseBody注解。  
    @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.  
    @ResponseBody也可以加到类一级,通过继承方法一级不需要添加。  
    示例:
    UserDetails.java
    复制代码
    package javabeat.net.rest;  
      
    import javax.xml.bind.annotation.XmlAttribute;  
    import javax.xml.bind.annotation.XmlRootElement;  
    @XmlRootElement  
    public class UserDetails {  
        private String userName;  
        private String emailId;  
      
        @XmlAttribute  
        public String getUserName() {  
            return userName;  
        }  
        public void setUserName(String userName) {  
            this.userName = userName;  
        }  
      
        @XmlAttribute  
        public String getEmailId() {  
            return emailId;  
        }  
        public void setEmailId(String emailId) {  
            this.emailId = emailId;  
        }  
    }  
    复制代码
     SpringRestControllerDemo.java
    复制代码
    package javabeat.net.rest;  
      
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.http.HttpStatus;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RequestMethod;  
    import org.springframework.web.bind.annotation.ResponseStatus;  
    import org.springframework.web.bind.annotation.RestController;  
      
    @RestController  
    public class SpringRestControllerDemo {  
        @Autowired UserDetails userDetails;  
        @RequestMapping(value="/springcontent",  
                method=RequestMethod.GET,produces={"application/xml", "application/json"})  
        @ResponseStatus(HttpStatus.OK)  
        public UserDetails getUser() {  
            UserDetails userDetails = new UserDetails();  
            userDetails.setUserName("Krishna");  
            userDetails.setEmailId("krishna@gmail.com");  
            return userDetails;  
        }  
      
        @RequestMapping(value="/springcontent.htm", method=RequestMethod.GET)  
        @ResponseStatus(HttpStatus.OK)  
        public String getUserHtml() {  
            //Test HTML view  
            return "example";  
        }  
    }  
    复制代码
     dispatcher-servlet.xml
    复制代码
    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:mvc="http://www.springframework.org/schema/mvc"  
        xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
      
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
    http://www.springframework.org/schema/mvc  
    http://www.springframework.org/schema/mvc/spring-mvc.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-4.0.xsd">  
        <context:component-scan base-package="com.infosys.rest" />  
        <bean id="userDetails" class="javabeat.net.rest.UserDetails"/>  
        <mvc:annotation-driven content-negotiation-manager="contentManager"/>  
        <bean id="contentManager"  
                    class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">  
                    <property name="favorPathExtension" value="true"/>  
                    <property name="ignoreAcceptHeader" value="true" />  
                    <property name="defaultContentType" value="text/html" />  
                    <property name="useJaf" value="false"/>  
                    <property name="mediaTypes">  
                        <map>  
                            <entry key="json" value="application/json" />  
                            <entry key="html" value="text/html" />  
                            <entry key="xml" value="application/xml" />  
                        </map>  
                    </property>  
            </bean>  
        <bean id="jspViewResolver"  
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
            <property name="prefix" value="/WEB-INF/jsp/" />  
            <property name="suffix" value=".jsp" />  
        </bean>  
      
    </beans> 
    复制代码
  • 相关阅读:
    leetcode教程系列——Binary Tree
    《Ranked List Loss for Deep Metric Learning》CVPR 2019
    《Domain Agnostic Learning with Disentangled Representations》ICML 2019
    Pytorch从0开始实现YOLO V3指南 part5——设计输入和输出的流程
    Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制
    Pytorch从0开始实现YOLO V3指南 part3——实现网络前向传播
    Pytorch从0开始实现YOLO V3指南 part2——搭建网络结构层
    Pytorch从0开始实现YOLO V3指南 part1——理解YOLO的工作
    让我佩服的人生 文章
    win8.1配置cordova+ionic等一系列东西
  • 原文地址:https://www.cnblogs.com/williamjie/p/9132286.html
Copyright © 2011-2022 走看看