• Spring REST 入门教程


    一、简介

        近几年,以信息为中心的表述行状态转移(Representational State Transfer, REST)已成为替换传统SOAP Web服务端流行方案。Spring对REST的支持是构建在Spring MVC之上的,所以需要先了解Spring MVC的知识。

    二、构建Spring REST步骤

        1、配置前端控制器

    复制代码
    复制代码
    1     <servlet>
    2         <servlet-name>dispatcher</servlet-name>
    3         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    4         <load-on-startup>1</load-on-startup>
    5     </servlet>
    6     <servlet-mapping>
    7         <servlet-name>dispatcher</servlet-name>
    8         <url-pattern>/</url-pattern>
    9     </servlet-mapping>
    复制代码
    复制代码

        2、配置组件扫描

        <context:component-scan base-package="com.cnblogs.javalouvre.mvc" />

        扫描到有@RestController、@Controller、@Compoment、@RestController、@Repository等注解的类,则把这些类注册为Bean。

        3、配置注解映射支持

        <mvc:annotation-driven />

        4、请求消息处理

    复制代码
    复制代码
     1     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
     2         <property name="messageConverters">
     3             <list>
     4                 <ref bean="mappingJackson2HttpMessageConverter"/>
     5                 <ref bean="marshallingHttpMessageConverter"/>
     6             </list>
     7         </property>
     8     </bean>
     9 
    10     <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    11         <property name="supportedMediaTypes" value="application/json" />
    12     </bean>
    13 
    14     <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    15         <property name="classesToBeBound">
    16             <list>
    17                 <value>com.cnblogs.javalouvre.model.Result</value>
    18             </list>
    19         </property>
    20     </bean>
    21     <bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
    22         <property name="marshaller" ref="jaxb2Marshaller"/>
    23         <property name="supportedMediaTypes" value="application/xml" />
    24     </bean>
    复制代码
    复制代码

        5、定义控制器

    复制代码
    复制代码
     1 package com.cnblogs.javalouvre.mvc;
     2 
     3 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
     4 import static org.springframework.http.MediaType.APPLICATION_XML_VALUE;
     5 import static org.springframework.web.bind.annotation.RequestMethod.GET;
     6 
     7 import org.springframework.web.bind.annotation.PathVariable;
     8 import org.springframework.web.bind.annotation.RequestMapping;
     9 import org.springframework.web.bind.annotation.ResponseBody;
    10 import org.springframework.web.bind.annotation.RestController;
    11 
    12 import com.cnblogs.javalouvre.model.Account;
    13 import com.cnblogs.javalouvre.model.Result;
    14 
    15 @RestController
    16 @RequestMapping(value = "/account")
    17 public class AccountController {
    18     
    19     @ResponseBody
    20     @RequestMapping(value = "/{id}", method = GET, produces = { APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE })
    21     public Result getAccount(@PathVariable(value = "id") Integer id) {
    22         return new Result("1", "成功", new Account("211111111111111111", "啦啦啦。。。"));
    23     }
    24 }
    复制代码
    复制代码

        6、消息封装POJO

    复制代码
    复制代码
     1 package com.cnblogs.javalouvre.model;
     2 
     3 import javax.xml.bind.annotation.XmlAccessType;
     4 import javax.xml.bind.annotation.XmlAccessorType;
     5 import javax.xml.bind.annotation.XmlElement;
     6 import javax.xml.bind.annotation.XmlRootElement;
     7 
     8 @XmlRootElement
     9 @XmlAccessorType(XmlAccessType.FIELD)
    10 public class Result implements java.io.Serializable {
    11 
    12     private static final long serialVersionUID = -6254553465205204221L;
    13     @XmlElement
    14     private String code;
    15     @XmlElement
    16     private String message;
    17     private Account account;
    18 
    19     public Result() {
    20     }
    21 
    22     public Result(String code, String message, Account account) {
    23         this.code = code;
    24         this.message = message;
    25         this.account = account;
    26     }
    27 
    28     // GETTER/SETTER
    29 
    30 }
    复制代码
    复制代码
    复制代码
    复制代码
     1 package com.cnblogs.javalouvre.model;
     2 
     3 import java.io.Serializable;
     4 
     5 import javax.xml.bind.annotation.XmlAccessType;
     6 import javax.xml.bind.annotation.XmlAccessorType;
     7 import javax.xml.bind.annotation.XmlElement;
     8 import javax.xml.bind.annotation.XmlRootElement;
     9 
    10 @XmlRootElement
    11 @XmlAccessorType(XmlAccessType.FIELD)
    12 public class Account implements Serializable {
    13 
    14     private static final long serialVersionUID = -4282266548648755231L;
    15 
    16     @XmlElement
    17     private String oid;
    18 
    19     @XmlElement
    20     private String name;
    21 
    22     public Account() {
    23     }
    24 
    25     public Account(String oid, String name) {
    26         this.oid = oid;
    27         this.name = name;
    28     }
    29 
    30     // GETTER/SETTER
    31 
    32 }
    复制代码
    复制代码

        7、测试

        使用  Firefox RESTClient 测试,设置Accept为application/json,则返回JSON格式数据,设置Accept为application/xml,则返回XML格式数据,如下:

    1 {"code":"1","message":"成功","account":{"oid":"211111111111111111","name":"啦啦啦。。。"}}
    1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><result><code>1</code><message>成功</message><account><oid>211111111111111111</oid><name>啦啦啦。。。</name></account></result>
  • 相关阅读:
    HDU 4864 Task(贪心值得学习)
    使程序在Linux下后台运行
    KMP算法
    优先队列的使用
    POJ 2761 Feed the dogs(树状数组求区间第K大)
    HDU 3584 Cube (三维树状数组)
    HDU 1892 See you~ (二维树状数组)
    POJ 1195 Mobile phones(二维树状数组)
    HDU 1166 敌兵布阵 (树状数组和线段树解法)
    POj 1703 Find them, Catch them(关系并查集)
  • 原文地址:https://www.cnblogs.com/yang-taiyue/p/6516461.html
Copyright © 2020-2023  润新知