【问题标题】:Application/JSON is Unsupported Media Type in restful webservice应用程序/JSON 是 RESTful Web 服务中不支持的媒体类型
【发布时间】:2015-04-03 14:22:01
【问题描述】:

我正在尝试创建一个 restful-jersey 网络服务。我必须将 JSON 对象传递给网络服务。

    @POST
    @Path("/saveVehicleTrackingData")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public String saveVehicleTrackingData(VehicleTracking vehicleTracking) {
        return vehicleTracking.toString();
    }

当我尝试向服务发出请求时,它显示 HTTP 状态 415 - 不支持的媒体类型。请帮助。另外,saveVehicleTrackingData方法的单个参数的类型应该是什么。

PS:我正在使用 POSTMAN 发出 http 请求。 http://goo.gl/vwXNXQ

更新: 正如 peeskillet 所指出的,这里缺少的是 JSON Provider。我面临的下一个挑战是,如何将 JSON Provider 集成到我的项目中。经过一番研究,我发现 FasterXML jackson 是 JSON 提供者之一。

【问题讨论】:

  • 您是如何提出请求的?您是否将内容类型指定为 application/json?
  • 同意,很可能是您没有将请求作为 JSON 内容类型发送

标签: java json rest jersey


【解决方案1】:

此图仅供参考。我刚刚从另一个帖子中得到它。

基本上当你使用 raw 时,它会默认为text/plain。下拉列表中的JSON,只是选择语法高亮。您仍然需要将Content-Type 标头设置为application/json。您可以点击Headers按钮并添加它。

【讨论】:

  • 不幸的是,设置标题不起作用(尽管它可能是必要的)。问题不在于邮递员请求(正如我对 text/plain 媒体类型进行了类似类型的实验),它与传递给方法 saveVehicleTrackingDatatype of single agrument乙>。正确的类型应该是什么?
  • 发布整个堆栈跟踪。它应该被记录
  • 关于类型,可以是阅读器提供者可以解析成的任何类型。你有 JSON 提供者吗?
  • 如果方法参数仍然是对象类型,那么使用text/plain 进行测试没有任何意义。 text/plain 是一个简单的字符串。读者如何知道如何将字符串转换为您的 POJO?您需要确保将 JSON 提供程序作为依赖项并进行配置。
  • JSON Provider 对我来说是一个新事物。希望这会有所帮助。我正在尝试使用 FasterXML jackson json 提供程序。我在我的 POM 中添加了所需的 maven 依赖项(com.fasterxml.jackson.jaxrs,jackson-jaxrs-json-provider)。能否请您进一步帮助我如何配置我的项目,以便在向 Web 服务发出请求时自动将 JSON 数据转换为 POJO。
【解决方案2】:

第一个问题:

您使用的是哪种主机(Tomcat、GlassFish 或其他...),主机的 Java 版本是什么?我从经验中知道,不同版本的 Tomcat 与 Jersey 结合有时会导致 @Consumes(MediaType.APPLICATION_JSON) 出现问题。

关于你的第二个问题:

你想构建一个 RESTful web 服务,路径的正确名称应该是; VehicleTrackingData(或任何你喜欢的)。此路径将与已知的 HTTP 动词一起工作(请求/响应); GET、POST、PUT 或 DELETE。

【讨论】:

  • 顺便说一句,GET/DELETE 永远不应该传递给请求正文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多