原文: 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 的支持(适用于 xmljson 格式)。

  1. <dependency>
  2. <groupid>org.codehaus.jackson</groupid>
  3. <artifactid>jackson-mapper-asl</artifactid>
  4. <version>${jackson-mapper-asl.version}</version>
  5. <scope>runtime</scope>
  6. </dependency>
  7. <dependency>
  8. <groupid>javax.xml.bind</groupid>
  9. <artifactid>jaxb-api</artifactid>
  10. <version>${jaxb-api.version}</version>
  11. <scope>runtime</scope>
  12. </dependency>

2. 添加ContentNegotiatingViewResolver

更新视图解析器的 bean 配置文件,并添加ContentNegotiatingViewResolver

  1. <mvc:annotation-driven />
  2. <context:component-scan base-package="com.howtodoinjava.web" />
  3. <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  4. <property name="mediaTypes">
  5. <map>
  6. <entry key="html" value="text/html"></entry>
  7. <entry key="json" value="application/json"></entry>
  8. <entry key="xml" value="application/xml"></entry>
  9. </map>
  10. </property>
  11. <property name="viewResolvers">
  12. <list>
  13. <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  14. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
  15. <property name="prefix" value="/WEB-INF/jsp/"></property>
  16. <property name="suffix" value=".jsp"></property>
  17. </bean>
  18. </list>
  19. </property>
  20. </bean>

3. 在模型类中添加 JAXB 注解

我正在编写 2 个类,即Users.javaUser.java。 这些类将具有 JAXB 注解,marshaller 将使用它们将其转换为适当的 xml 或 json 格式。

它们仅作为示例,您可以编写自己的类。

Users.java

  1. package com.howtodoinjava.model;
  2. import java.util.Collection;
  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. @XmlRootElement(name="users")
  8. @XmlAccessorType(XmlAccessType.NONE)
  9. public class Users
  10. {
  11. @XmlElement(name="user")
  12. private Collection<User> users;
  13. public Collection<User> getUsers() {
  14. return users;
  15. }
  16. public void setUsers(Collection<User> users) {
  17. this.users = users;
  18. }
  19. }

User.java

  1. package com.howtodoinjava.model;
  2. import javax.xml.bind.annotation.XmlAccessType;
  3. import javax.xml.bind.annotation.XmlAccessorType;
  4. import javax.xml.bind.annotation.XmlElement;
  5. import javax.xml.bind.annotation.XmlRootElement;
  6. @XmlRootElement(name="user")
  7. @XmlAccessorType(XmlAccessType.NONE)
  8. public class User {
  9. @XmlElement(name="first-name")
  10. private String firstName;
  11. @XmlElement(name="last-name")
  12. private String lastName;
  13. public String getFirstName() {
  14. return firstName;
  15. }
  16. public void setFirstName(String firstName) {
  17. this.firstName = firstName;
  18. }
  19. public String getLastName() {
  20. return lastName;
  21. }
  22. public void setLastName(String lastName) {
  23. this.lastName = lastName;
  24. }
  25. }

4. 创建 REST 控制器

DemoController.java具有 REST 专用注解,用于请求参数映射中的路径映射。 另外,我们将为请求和响应指定头属性。

DemoController.java

  1. @Controller
  2. @RequestMapping("/users")
  3. public class DemoController
  4. {
  5. @RequestMapping(method = RequestMethod.GET, value="/{id}", headers="Accept=*/*")
  6. public @ResponseBody User getUserById(@PathVariable String id)
  7. {
  8. User user = new User();
  9. user.setFirstName("john");
  10. user.setLastName("adward");
  11. return user;
  12. }
  13. @RequestMapping(method = RequestMethod.GET, headers="Accept=*/*")
  14. public @ResponseBody Users getAllUsers()
  15. {
  16. User user1 = new User();
  17. user1.setFirstName("john");
  18. user1.setLastName("adward");
  19. User user2 = new User();
  20. user2.setFirstName("tom");
  21. user2.setLastName("hanks");
  22. Users users = new Users();
  23. users.setUsers(new ArrayList<User>());
  24. users.getUsers().add(user1);
  25. users.getUsers().add(user2);
  26. return users;
  27. }
  28. }

5. Spring REST 示例

现在,让我们在 tomcat 上重新部署应用程序,并在任何 REST 客户端上访问 URL。 我正在使用RESTClient。 这是一个用于测试 RESTful Web 服务的 firefox 插件。

  • URL: http://localhost:8080/firstSpringApplication/users
    Spring REST 控制器示例 - 图1

  • URL: http://localhost:8080/firstSpringApplication/users/123
    Spring REST 控制器示例 - 图2

下载源码

如果确实有帮助,请给我评论,或者您有任何疑问。

学习快乐!