我已經使用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類已經找到。
請參閱最新的評論。我確實使用了application/vnd.api + json。 – Navid
我需要看到實際的客戶端代碼。我在這裏看到你的服務器端實現。 –
請參閱附件圖片:http://i.stack.imgur.com/wtUF0.png – Navid