泽西岛415不支持的媒体types

我一直在努力,以纠正HTTP错误415 Unsupported Media Type但它仍然显示媒体不支持的页面。 我在Postman中添加header application/json

这是我的Java代码

 package lostLove; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.json.JSONObject; @Path("/Story") public class Story { @POST @Consumes({"application/json"}) @Produces(MediaType.APPLICATION_JSON) // @Consumes(MediaType.APPLICATION_JSON) // @Path("/Story") public JSONObject sayJsonTextHello(JSONObject inputJsonObj) throws Exception { String input = (String) inputJsonObj.get("input"); String output = "The input you sent is :" + input; JSONObject outputJsonObj = new JSONObject(); outputJsonObj.put("output", output); return outputJsonObj; } @GET @Produces(MediaType.TEXT_PLAIN) public String sayPlainTextHello() { return "hello"; } } 

这里是我的web.xml文件

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>LostLove</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>lostLove</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> 

我们的对象如何序列化和反序列化到响应stream和请求stream,通过MessageBodyWriterMessageBodyReader

会发生什么是从提供商的registry,将可以处理JSONObject和媒体typesapplication/json 。 如果找不到,泽西不能处理请求,并将发送415不支持的媒体types。 您通常应该也会在服务器端获得logging的exception。 不知道你是否有机会查看日志。

Jersey没有org.json对象的标准读写器。 你将不得不在网上search一个实现或自己写一个,然后注册它。 你可以阅读更多关于如何在这里实现它。

或者,您可以接受一个string并返回一个string。 只需使用string参数构造JSONObject ,并在返回时调用JSONObject.toString()

我的build议是使用像Jackson这样的数据绑定框架,它可以处理序列化和反序列化模型对象(简单的POJO)。 比如你可以有一个类似的

 public class Model { private String input; public String getInput() { return input; } public void setInput(String input) { this.input = input; } } 

您可以将Model作为方法参数

 public ReturnType sayJsonTextHello(Model model) 

相同的ReturnType 。 只要创build一个POJO为你想要返回的types。 JSON属性基于JavaBean属性名称(遵循上述命名约定的getter / setter)。

为了得到这个支持,你可以添加这个Maven依赖:

 <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.17</version> <!-- make sure the jersey version matches the one you are using --> </dependency> 

或者如果你不使用Maven,你可以看到这个post ,可以独立下载的jar包。

一些资源:

  • Jersey JSON支持
  • jackson文件