2016-09-23 38 views
3

我已經使用Spring Boot(版本1.3.6.RELEASE)實現了一個REST API,它按預期工作。不過,我想向我的應用程序添加JSON API支持。Katharsis與Spring Boot結合使用

問題是我試圖在Katharsis資源上執行GET時得到了404。

在pom.xml中的樣子的依賴如下(我使用Spring Security太):

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.hsqldb</groupId> 
       <artifactId>hsqldb</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-integration</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.integration</groupId> 
     <artifactId>spring-integration-jdbc</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-hateoas</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.woodstox</groupId> 
     <artifactId>woodstox-core-asl</artifactId> 
     <version>4.4.1</version> 
    </dependency> 
    <dependency> 
     <groupId>net.sf.ehcache</groupId> 
     <artifactId>ehcache</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>${hsqldb.version}</version> 
    </dependency> 
    <!--SpringFox dependencies --> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger2</artifactId> 
     <version>${springfox-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger-ui</artifactId> 
     <version>${springfox-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.mail</groupId> 
     <artifactId>javax.mail</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.velocity</groupId> 
     <artifactId>velocity</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.velocity</groupId> 
     <artifactId>velocity-tools</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>dumbster</groupId> 
     <artifactId>dumbster</artifactId> 
     <version>1.6</version> 
     <scope>test</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>javax.mail</groupId> 
       <artifactId>mail</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>io.katharsis</groupId> 
     <artifactId>katharsis-spring</artifactId> 
     <version>2.6.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.reflections</groupId> 
     <artifactId>reflections</artifactId> 
     <version>0.9.9</version> 
    </dependency> 
</dependencies> 

我的應用程序初始化類如下:

@SpringBootApplication 
@Configuration 
@EnableAutoConfiguration(exclude = WebMvcAutoConfiguration.class) 
@EnableSwagger2 
@ComponentScan(basePackages = "com.myapp") 
@Import({KatharsisConfigV2.class}) 
public class Application { 
    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(Application.class, args); 
    } 
} 

的資源類:

@ApiModel(description = "") 
@JsonApiResource(type = "foo-data") 
public class FooData extends DomainRepresentation { 
    @JsonApiId 
    private String id = null; 
    @JsonProperty 
    private String name = null; 
    // .... getters & setters 
} 

ResourceRepository clas S:

@JsonApiResourceRepository(FooData.class) 
@Component 
public class FooDataKatApi extends MyApi { 
    @Autowired 
    private FooDataService fooDataService; 

    @JsonApiFindOne 
    public FooData foodataIdGet(String id, QueryParams requestParams) { 
     FooData result = fooDataService.getFooDataById(id); 
     return result; 
    } 
} 

如果我增加了Spring @ResourceMapping比我找回數據,但沒有卡塔西斯增加像「鏈接」等,這是因爲如果API調用沒有被拾起卡塔西斯,但它由Spring處理。

任何幫助,將不勝感激。

- EDITTED -

的FooDataService如下:

@Service 
public class FooDataService extends MyService { 
    @Autowired 
    private FooDataRepository fooDataRepository; 

    public FooData getFooDataById(String id) { 
     FooDataEnt fooDataEnt = fooDataRepository.findByFooDataId(id); 

     if (fooDataEnt != null) { 
      return convertFooDataEntToFooData.apply(fooDataEnt); 
     } 

     throw new NotFoundException("Foo not found"); 
    } 
} 

的FooDataRepository擴展Spring的PagingAndSortingRepository。

卡塔西斯配置在application.yaml:

katharsis: 
    resourcePackage: com.my.package 
    domainName: http://localhost:8080 
    pathPrefix: /api/kat 

The request and response from PostMan

- 更新1 -

顯然對於katharsis.pathPrefix配置的值是不正確的。 Web應用程序的上下文根是「/ api」,katharsis.pathPrefix的值應該只是「/ kat」。

我的下一個問題是在處理請求時正在拋出RepositoryNotFoundException,而Resource類已經找到。

回答

0

我在任何地方都看不到你的foo數據服務實現。不過,我99%肯定你沒有傳遞json API接受類型。

Accept: application/vnd.api+json 
+0

請參閱最新的評論。我確實使用了application/vnd.api + json。 – Navid

+0

我需要看到實際的客戶端代碼。我在這裏看到你的服務器端實現。 –

+0

請參閱附件圖片:http://i.stack.imgur.com/wtUF0.png – Navid

1

我通過調試代碼解決了謎題,發現我的Katharsis配置不正確。 Katharsis只拾取資源類而不是資源庫類。當我將katharsis.resourcePackage更改爲資源存儲庫所在的更高級別時,問題得到解決,Katharsis拿起所有相關的註釋類。

+0

我很高興你明白了。Katharsis的確有一個問題,如果你給它一個錯誤的接受類型,你會得到一個404 –

相關問題