2014-07-05 58 views
1

我試圖讓澤西連載我的對象,每當我回他們,就像這樣:我如何使用Jersey序列化爲Json? (我使用的搖籃)

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

當我做一個POST請求,這跟例如「約翰」,它應該響應一個User的json表示。然而,它的作用是給一個錯誤狀態500,服務器記錄以下

全球讀者攔截器: org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor 全球作家攔截器: org.glassfish。 jersey.server.internal.MappableExceptionWrapperInterceptor org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor 名字:卡爾 返回:[email protected] 2014年7月5日下午10時十七分49秒org.glassfish。 jersey.message.internal.WriterInterceptorExecutor $ TerminalWriterInterceptor aroundWriteTo SEVERE:MessageBodyWriter not f ound for media type = application/json,type = class cd.orbit.server.User,genericType = class cd.orbit.server.User。

這讓我覺得莫名其妙地有發現,把我的用戶對象轉換爲JSON沒有圖書館/方法,但是我有以下gradle這個build文件(注意傑克遜依賴):

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格式返回項目?

回答

3

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

然後你需要註冊JacksonFeature如下。

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

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

最後,你可以找到更多的細節here

+0

我已經有JSON提供程序依賴關係(請參閱我的文章)。如上所示,我現在試着註冊JacksonFeature。我把代碼放在我的newUser()方法中,並將包更改爲我的。然而,這並沒有解決我的問題,沒有任何改變。我可以忽略一些東西嗎 – user717572

+1

我在依賴列表中看不到'jersey-media-json-jackson'。 'application'必須在您的web應用程序'web.xml'部署描述符中註冊。有關詳細信息,請參閱[此處](https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet),前提是您使用基於Servlet的環境。 – pgiecek

+0

Aaah我看到了,我使用了特定的依賴關係並添加了它。我只查看https://jersey.java.net/project-info/2.10.1/jersey/project/jersey-media-moxy/dependencies.html並在第一個依賴項部分添加了所有依賴項。既然這不是我所要做的,那我怎麼知道我必須添加哪些依賴關係(一般情況下)?換句話說,你是怎麼知道這個依賴項必須被添加的?謝謝! – user717572