原文: https://howtodoinjava.com/spring-restful/how-to-write-restful-webservices-using-spring-3-mvc/
学习创建 Spring REST 控制器,该控制器可以处理任何 Spring MVC 应用程序中的 REST API 调用。 它邀请添加@Controller和@RequestMapping注解。
为了编写此应用程序,我正在修改 Spring MVC 示例中编写的源代码。 因此,如果需要,您可以从给定的链接下载源代码。
1. 更新 Maven 依赖项
更新pom.xml以添加对 JAXB 和 Jackson 的支持(适用于 xml 和 json 格式)。
<dependency><groupid>org.codehaus.jackson</groupid><artifactid>jackson-mapper-asl</artifactid><version>${jackson-mapper-asl.version}</version><scope>runtime</scope></dependency><dependency><groupid>javax.xml.bind</groupid><artifactid>jaxb-api</artifactid><version>${jaxb-api.version}</version><scope>runtime</scope></dependency>
2. 添加ContentNegotiatingViewResolver
更新视图解析器的 bean 配置文件,并添加ContentNegotiatingViewResolver。
<mvc:annotation-driven /><context:component-scan base-package="com.howtodoinjava.web" /><bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"><property name="mediaTypes"><map><entry key="html" value="text/html"></entry><entry key="json" value="application/json"></entry><entry key="xml" value="application/xml"></entry></map></property><property name="viewResolvers"><list><bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property></bean></list></property></bean>
3. 在模型类中添加 JAXB 注解
我正在编写 2 个类,即Users.java和User.java。 这些类将具有 JAXB 注解,marshaller 将使用它们将其转换为适当的 xml 或 json 格式。
它们仅作为示例,您可以编写自己的类。
Users.java
package com.howtodoinjava.model;import java.util.Collection;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="users")@XmlAccessorType(XmlAccessType.NONE)public class Users{@XmlElement(name="user")private Collection<User> users;public Collection<User> getUsers() {return users;}public void setUsers(Collection<User> users) {this.users = users;}}
User.java
package com.howtodoinjava.model;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="user")@XmlAccessorType(XmlAccessType.NONE)public class User {@XmlElement(name="first-name")private String firstName;@XmlElement(name="last-name")private String lastName;public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}}
4. 创建 REST 控制器
DemoController.java具有 REST 专用注解,用于请求参数映射中的路径映射。 另外,我们将为请求和响应指定头属性。
DemoController.java
@Controller@RequestMapping("/users")public class DemoController{@RequestMapping(method = RequestMethod.GET, value="/{id}", headers="Accept=*/*")public @ResponseBody User getUserById(@PathVariable String id){User user = new User();user.setFirstName("john");user.setLastName("adward");return user;}@RequestMapping(method = RequestMethod.GET, headers="Accept=*/*")public @ResponseBody Users getAllUsers(){User user1 = new User();user1.setFirstName("john");user1.setLastName("adward");User user2 = new User();user2.setFirstName("tom");user2.setLastName("hanks");Users users = new Users();users.setUsers(new ArrayList<User>());users.getUsers().add(user1);users.getUsers().add(user2);return users;}}
5. Spring REST 示例
现在,让我们在 tomcat 上重新部署应用程序,并在任何 REST 客户端上访问 URL。 我正在使用RESTClient。 这是一个用于测试 RESTful Web 服务的 firefox 插件。
URL:
http://localhost:8080/firstSpringApplication/users
URL:
http://localhost:8080/firstSpringApplication/users/123
如果确实有帮助,请给我评论,或者您有任何疑问。
学习快乐!
