簡體   English   中英

如何使用Jersey序列化Json? (我正在使用Gradle)

[英]How do I serialize to Json with Jersey? (I'm using Gradle)

每當我返回時,我都試圖讓Jersey對序列化我的對象,如下所示:

@POST
@Path("/new")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public User newUser(String username) {
    return new User(username);
}

當我使用例如“john”對此發出POST請求時,它應該以User的json表示進行響應。 但是,它所做的只是提供錯誤狀態500,並且服務器記錄以下內容

全局讀者攔截器:org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor全局編寫器攔截器:org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor name:carl returns:cd.orbit。 org.glassfish.jersey.message.internal.WriterInterceptorExecutor $ TerminalWriterInterceptor aroundWriteTo SEVERE:找不到媒體類型= application / json的MessageBodyWriter,type = class cd.orbit.server.server.User@4c84f510 jul 05,2014 10:17:49 PM .User,genericType = class cd.orbit.server.User。

這讓我覺得在某種程度上找不到將我的User對象變成Json的庫/方法,但是我有以下gradle構建文件(注意jackson依賴項):

buildscript {
repositories {
    mavenCentral()
}

dependencies {
    classpath 'com.google.appengine:gradle-appengine-plugin:1.9.6'
}
}

apply plugin: 'war'
apply plugin: 'appengine'

sourceCompatibility = 1.7
version = '1.0'

repositories {
mavenCentral()
}

dependencies {
providedCompile 'javax.servlet:servlet-api:2.5'
compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.6'
testCompile group: 'junit', name: 'junit', version: '4.11'

compile 'org.glassfish.jersey.core:jersey-client:2.10.1'
compile 'org.glassfish.jersey.core:jersey-server:2.10.1'
compile 'org.glassfish.jersey.core:jersey-common:2.10.1'
compile 'org.glassfish.jersey.containers:jersey-container-servlet-core:2.10'

compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.2'
compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.3.2'
compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.3.2'

compile 'com.badlogicgames.gdx:gdx:1.0.0'

}

appengine {
httpPort = 8085

appcfg {
    email = 'aaaaa'
    passIn = true

    app {
        id = 'aaaaa'
    }
}
}

task copyDeps(type: Copy) {
from configurations.runtime
into "${rootDir}/war/WEB-INF/lib"
}

順便說一下, User類使用了所有正確的注釋。

為什么運行Jersey的我的服務器(Google App Engine)不能以JSON格式返回項目?

您需要將依賴項添加到Jersey的具體JSON提供程序。 要使用Jackson作為JSON提供程序,您需要添加jersey-media-json-jackson模塊。

然后你需要注冊JacksonFeature如下。

final Application application = new ResourceConfig()
    .packages("your.packages.to.scan")
    .register(JacksonFeature.class)
    // rest omitted

檢查您是否有球衣媒體-傑克遜模塊所需的所有其他依賴這里

最后,您可以在此處找到更多詳細信息。

暫無
暫無

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

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