2015-02-11 116 views
0

我正在開始使用Java,所以期待這是一個非常業餘的問題。我正在修改Neo4j的非託管擴展模板。Jersey,JSON API,「415不支持的媒體類型」

我已經定義了一個NTReport類,它被包含在裏面,一切都很愉快地編譯。對內容類型設置爲application/json的端點進行發佈會在主題中返回錯誤。

我也有對象中定義的getStatus方法。

package org.neo4j.example.unmanagedextension; 

import org.codehaus.jackson.map.ObjectMapper; 
import org.neo4j.cypher.javacompat.ExecutionEngine; 
import org.neo4j.cypher.javacompat.ExecutionResult; 
import org.neo4j.graphdb.*; 
import org.neo4j.helpers.collection.IteratorUtil; 
import org.neo4j.server.database.CypherExecutor; 
import org.neo4j.example.unmanagedextension.NTReport; 

import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.Produces; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.MediaType; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 
import java.util.Map; 

@Path("/service") 
public class MyService { 

    @POST 
    @Consumes({MediaType.APPLICATION_JSON}) 
    @Path("/reports") 
    public String getReportJava(NTReport report) { 
     return "Report params: " + report.getMetrics(); 
    } 
} 

這裏的NTReport

package org.neo4j.example.unmanagedextension; 
public class NTReport { 
    private String endpoints; 
    private String resolution; 
    private String metrics; 

    public String getEndpoints() { 
     return this.endpoints; 
    } 

    public String getResolution() { 
     return this.resolution; 
    } 

    public String getMetrics() { 
     return this.metrics; 
    } 
} 

我的理解是,通過使用@Consumes,它應該在JSON鍵映射到類的同名變量。我錯了嗎?

當我使用@GET創建基本端點時,我會得到預期的響應。

ALSOthis後似乎描述相同的確切問題,所以我會檢查它。

我發現另一個錯誤日誌,似乎表明它不知道如何處理JSON畢竟。

Feb 11, 2015 5:46:19 PM com.sun.jersey.spi.container.ContainerRequest getEntity 
SEVERE: A message body reader for Java class org.neo4j.example.unmanagedextension.NTReport, and Java type class org.neo4j.example.unmanagedextension.NTReport, and MIME media type application/json was not found. 
The registered message body readers compatible with the MIME media type are: 
*/* -> 
    com.sun.jersey.core.impl.provider.entity.FormProvider 
    com.sun.jersey.core.impl.provider.entity.StringProvider 
    com.sun.jersey.core.impl.provider.entity.ByteArrayProvider 
    com.sun.jersey.core.impl.provider.entity.FileProvider 
    com.sun.jersey.core.impl.provider.entity.InputStreamProvider 
    com.sun.jersey.core.impl.provider.entity.DataSourceProvider 
    com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.ReaderProvider 
    com.sun.jersey.core.impl.provider.entity.DocumentProvider 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader 
    com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General 
    com.sun.jersey.core.impl.provider.entity.EntityHolderReader 
+0

請問您可以添加NTReport嗎? – lifus 2015-02-11 21:24:32

+0

什麼是您的JSON到Java綁定提供程序? – lifus 2015-02-11 21:50:39

+0

此外,我的帖子中增加了更多的代碼。 – subvertallchris 2015-02-11 21:53:11

回答

0

jersey-jsonprovides一套MessageBodyReader<T>MessageBodyWriter<T>。您可以將@XmlRootElement加入您的NTReport或選擇任何其他可用於球衣1.x的選項,因爲目前neo4j社區服務器uses Jersey 1.9

+0

你能否給我一些例子實施?我添加了依賴到'pom.xml',但這個類似乎並不認可'@ XmlRootElement'。 – subvertallchris 2015-02-11 23:01:58

+0

JAXB需要默認構造函數。 I.e'NTReport(){}'。請務必添加它 – lifus 2015-02-11 23:06:31

+0

是的,只是注意到了這一點。 'import javax.xml.bind.annotation.XmlRootElement; '也使'@ XmlRootElement'工作。我現在正在回答你的答案中的第二個鏈接,填補空缺...... – subvertallchris 2015-02-11 23:07:51

相關問題