簡體   English   中英

將spring-data-rest添加到gs-rest-service樣本項目后,存在依賴性問題

[英]Dependency issue after adding spring-data-rest to gs-rest-service sample project

我正在嘗試使用Spring的RESTful Web服務,我的起始項目是Spring的gs-rest-service 當我點擊http://localhost:8080/greeting時,項目運行正常,我得到{“ id”:1,“ content”:“ Hello,World!”}。

問題是,當我在pom.xml中將依賴項添加到spring-data-rest-corespring-data-rest-webmvc ,該應用程序不再起作用。 當我打http://localhost:8080/greeting ,出現以下錯誤:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Tue Aug 12 12:27:28 CEST 2014
There was an unexpected error (type=Not Acceptable, status=406).
Could not find acceptable representation

當我刪除依賴關系時,應用程序又可以正常工作了,這是什么原因引起的? 這是我的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>org.springframework</groupId>
<artifactId>gs-rest-service</artifactId>
<version>0.1.0</version>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.5.RELEASE</version>
</parent>

<packaging>war</packaging>

<properties>
    <spring.version>4.0.5.RELEASE</spring.version>
    <spring.boot.version>1.1.4.RELEASE</spring.boot.version>
    <jdk.version>1.7</jdk.version>
    <jetty.version>8.1.8.v20121106</jetty.version>
    <spring.data.rest.version>2.1.2.RELEASE</spring.data.rest.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-rest-core</artifactId>
        <version>${spring.data.rest.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-rest-webmvc</artifactId>
        <version>${spring.data.rest.version}</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
            </configuration>
        </plugin>

        <plugin>                
            <groupId>org.mortbay.jetty</groupId>                
            <artifactId>jetty-maven-plugin</artifactId>             
            <version>${jetty.version}</version>             
        </plugin>
    </plugins>
</build>
</project>

Spring Boot提供了專用於Spring Data REST的啟動器:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

您正在使依賴關系和配置變得復雜。 正如@OliverGierke已經提到的那樣,請使用以下啟動程序代替單個依賴項。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

另外,您已經在使用spring-boot-starter-parent因此您不需要spring boot版本是您配置的一些其他屬性。 代替jdk.version使用java.version ,僅此java.version 留下以下pom。 (這還添加了spring-boot插件)。

<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>org.springframework</groupId>
    <artifactId>gs-rest-service</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.1.5.RELEASE</version>
    </parent>

    <packaging>jar</packaging>

    <properties>
        <java.version>1.7</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

這將創建一個可執行jar,您可以使用java -jar <your-jar-name-here>.jar 這也應該具有您需要的所有依賴項,包括用於JSON(un)編組的jackson,這是spring-boot-starter-web的依賴項。

使用@EnableAutoConfiguration Spring Boot將檢測Spring MVC和Jackson,並對其進行正確的配置。 Spring Data REST也是如此。 您不必自己弄亂xml(或戰爭檔案)。

如果要使用Jetty,我將其刪除了,請查看Spring Boot 參考指南中有關如何執行此操作的信息。

事實證明,我必須向Jackson添加依賴項:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

並聲明一個以下bean,如Spring MVC-HttpMediaTypeNotAcceptableException所述

<context:annotation-config/>

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jacksonMessageConverter"/>
        </list>
    </property>
</bean>

然后,使用@ImportResource("beans.xml")添加到Application.java中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM