首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Katharsis与Spring Boot的结合

Katharsis与Spring Boot的结合
EN

Stack Overflow用户
提问于 2016-09-23 21:59:40
回答 2查看 1.6K关注 0票数 3

我已经使用Spring Boot (1.3.6.RELEASE版)实现了一个REST API,它可以像预期的那样工作。但是,我想在我的应用程序中添加JSON API支持。

问题是,当我试图在Katharsis资源上执行get时,我得到了一个404。

pom.xml中的依赖关系如下所示(我也使用Spring Security ):

代码语言:javascript
复制
<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>

我的应用程序初始化类如下:

代码语言:javascript
复制
@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);
    }
}

资源类:

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

ResourceRepository类:

代码语言:javascript
复制
@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”这样的Katharsis添加的东西。

任何帮助都将不胜感激。

--编辑--

FooDataService如下:

代码语言:javascript
复制
@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配置:

代码语言:javascript
复制
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,而资源类已经被找到了。

EN

回答 2

Stack Overflow用户

发布于 2016-09-26 00:14:08

我在任何地方都没有看到您的foo数据服务实现。但是,我99%确定您没有传递json api接受类型。

代码语言:javascript
复制
Accept: application/vnd.api+json
票数 1
EN

Stack Overflow用户

发布于 2016-09-27 19:24:12

通过调试代码并发现我的Katharsis配置不正确,我解决了这个难题。Katharsis只获取资源类,而不获取资源存储库类。当我将katharsis.resourcePackage更改到资源库所在的更高级别时,问题得到了解决,Katharsis获得了所有相关的带注释的类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39662684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档