如何使用jackson绑定Spring 4返回json

时间:2015-03-07 15:39:37

标签: json spring rest jackson

我是Spring和Maven的新手,并且一直在努力创建一个返回简单json字符串的Web应用程序。

我一直在关注here的教程,并从here得到了一些指示,但无法使其发挥作用。然后我读到了教程不能用于Spring 4的地方。

这是我到目前为止所拥有的。

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>jsonDemo</groupId>
  <artifactId>jsonDemo</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>
  <name>jsonDemo</name>
  <repositories>
    <repository>
      <id>eap</id>
      <url>http://maven.repository.redhat.com/techpreview/all</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <id>eap</id>
      <url>http://maven.repository.redhat.com/techpreview/all</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>9.2-1003-jdbc4</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.25</version>
    </dependency>     
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.1.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.1.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.1.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.5.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.5.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.5.1</version>
    </dependency>
  </dependencies>
  <profiles>
    <profile>
      <!-- When built in OpenShift the 'openshift' profile will be used when 
        invoking mvn. -->
      <!-- Use this profile for any OpenShift specific customization your app 
        will need. -->
      <!-- By default that is to put the resulting archive into the 'webapps' 
        folder. -->
      <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
      <id>openshift</id>
      <build>
        <finalName>jsonDemo</finalName>
        <plugins>
          <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
              <outputDirectory>webapps</outputDirectory>
              <warName>ROOT</warName>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

的web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         metadata-complete="false">

  <display-name>jsonDemo</display-name>

  <servlet>
    <servlet-name>rest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>rest</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

  <!--<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/rest-servlet.xml</param-value>
  </context-param>-->

  <!--<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>-->

</web-app>

其余-servlet.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">

  <mvc:annotation-driven />
  <context:component-scan base-package="com.webapp.demo" />
</beans>

Demo.java

public class Demo {

  private long id;
  private String demo;

  public Demo(long id, String demo) {
    this.id = id;
    this.demo = demo;
  }

  public long getId() {
    return id;
  }

  public String getDemo() {
    return demo;
  }

  public void setId(long id) {
    this.id = id;
  }

  public void setDemo(String demo) {
    this.demo = demo;
  }

}

DemoController.java

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class DemoController {

  @RequestMapping(value = "/demo")
  public Demo demo(Model model) {
    return new Demo(1, "Demo");
  }

}

要在STS中对此进行测试,我右键单击该项目,然后选择Run As - &gt;在服务器上运行 - &gt; Pivotal tc Server Developer Edition v3.0。它会打开一个包含网址http://localhost:8080/jsonDemo的浏览器。它提供HTTP状态404 - 请求的资源不可用。然后我将其更改为http://localhost:8080/demo但我仍然收到404错误。我也尝试了http://localhost:8080/jsonDemo/demo但同样的错误。

感谢任何帮助。

更新1 修改了web.xml以删除context-param和listener。

更新2 再次修改了web.xml并添加了version = 3.0。

更新3 感谢JB Nizet,我通过将DemoController的注释从@Controller更改为@RestController来实现它。

此外,我无法在Spring Tools Suite中配置的Pivotal tc服务器中使用它,因此我必须下载Wildfly 8.2.0.Final并在那里部署war文件进行测试。

0 个答案:

没有答案