簡體   English   中英

Jersey,JSON API,“415不支持的媒體類型”

[英]Jersey, JSON API, “415 Unsupported Media Type”

我開始使用Java,所以期待這是一個非常業余的問題。 我正在修改Neo4j的非托管擴展模板。

我已經定義了一個NTReport類,它包含在內,一切都很愉快。 對內容類型設置為application/json的端點進行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創建基本端點時,得到了預期的響應。

此外這篇文章似乎描述了同樣的問題,所以我會檢查它。

我發現了另一個錯誤日志,似乎表明它畢竟不知道如何處理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

jersey-json 提供了一組MessageBodyReader<T>MessageBodyWriter<T> 您可以將@XmlRootElement添加到您的NTReport或選擇任何其他可用於jersey 1.x的選項,因為neo4j社區服務器目前使用Jersey 1.9

暫無
暫無

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

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