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>
原文地址:https://www.cnblogs.com/yang-taiyue/p/6516461.html