Skip to content

Latest commit

 

History

History
190 lines (139 loc) · 5.71 KB

169.md

File metadata and controls

190 lines (139 loc) · 5.71 KB

Spring REST 控制器示例

原文: 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 格式)。

<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.javaUser.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

    http://localhost:8080/firstSpringApplication/users

  • URL: http://localhost:8080/firstSpringApplication/users/123

    http://localhost:8080/firstSpringApplication/users/123

下载源码

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

学习快乐!