找不到媒体类型 =application/json、类型=class SalesService.Item、genericType=class SalesService.Item 的 MessageBodyWriter
MessageBodyWriter not found for media type=application/json, type=class SalesService.Item, genericType=class SalesService.Item
我收到此错误:未找到媒体类型=application/json、类型=class SalesService.Item、genericType=class SalesService.Item 的 MessageBodyWriter .
我想要做的是让我的 restful 服务方法 return 一个自定义对象,在本例中是对象:Item。但是我收到这个错误并且在浏览器中出现错误 500。
我在 netbeans 中使用 JAX-RS 2.25.1 版库
我知道有很多这样的问题,但我找不到任何适合我的解决方案。
提前致谢!
WEB.XML
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>examples.rest.school</display-name>
<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>SalesService</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</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>
资源服务class:
package SalesService;
import java.util.ArrayList;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import DB.DBConnecter;
import javax.ws.rs.PathParam;
import java.util.List;
import javax.ws.rs.Consumes;
@Path("Sales")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class SalesResources {
private final DBConnecter dbConnector;
public SalesResources() {
dbConnector = new DBConnecter();
}
@GET
@Path("session/{sessionID}")
@Produces(MediaType.APPLICATION_JSON)
public Item GetItem(@PathParam("sessionID") String sessionID) {
List<Item> items = new ArrayList<>();
if(dbConnector.CheckSessionID(sessionID)){
items = dbConnector.GetItems();
return items.get(0);
}
return new Item();
}
}
项目class:
package SalesService;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Item {
private int id;
private String name;
private int quantity;
private double price;
private String type;
public Item(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void AddQuantity() {
this.quantity = quantity + 1;
}
public void RemoveQuantity() {
this.quantity = quantity - 1;
}
public Item(int id, String name, int quantity, double price, String type) {
this.id = id;
this.name = name;
this.quantity = quantity;
this.price = price;
this.type = type;
}
}
堆栈跟踪
04-Mar-2017 21:03:06.273 SEVERE [http-nio-8080-exec-1] org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter not found for media type=application/json, type=class SalesService.Item, genericType=class SalesService.Item.
添加
解决了这个问题
org.codehaus.jackson.jaxrs
在web.xml这样
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>examples.rest.school</display-name>
<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>SalesService,org.codehaus.jackson.jaxrs</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</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>
添加了 4 个 jackson .JAR 文件之后
并将它们添加到库文件夹中(参考)
我收到此错误:未找到媒体类型=application/json、类型=class SalesService.Item、genericType=class SalesService.Item 的 MessageBodyWriter .
我想要做的是让我的 restful 服务方法 return 一个自定义对象,在本例中是对象:Item。但是我收到这个错误并且在浏览器中出现错误 500。
我在 netbeans 中使用 JAX-RS 2.25.1 版库
我知道有很多这样的问题,但我找不到任何适合我的解决方案。
提前致谢!
WEB.XML
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>examples.rest.school</display-name>
<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>SalesService</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</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>
资源服务class:
package SalesService;
import java.util.ArrayList;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import DB.DBConnecter;
import javax.ws.rs.PathParam;
import java.util.List;
import javax.ws.rs.Consumes;
@Path("Sales")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class SalesResources {
private final DBConnecter dbConnector;
public SalesResources() {
dbConnector = new DBConnecter();
}
@GET
@Path("session/{sessionID}")
@Produces(MediaType.APPLICATION_JSON)
public Item GetItem(@PathParam("sessionID") String sessionID) {
List<Item> items = new ArrayList<>();
if(dbConnector.CheckSessionID(sessionID)){
items = dbConnector.GetItems();
return items.get(0);
}
return new Item();
}
}
项目class:
package SalesService;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Item {
private int id;
private String name;
private int quantity;
private double price;
private String type;
public Item(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void AddQuantity() {
this.quantity = quantity + 1;
}
public void RemoveQuantity() {
this.quantity = quantity - 1;
}
public Item(int id, String name, int quantity, double price, String type) {
this.id = id;
this.name = name;
this.quantity = quantity;
this.price = price;
this.type = type;
}
}
堆栈跟踪
04-Mar-2017 21:03:06.273 SEVERE [http-nio-8080-exec-1] org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter not found for media type=application/json, type=class SalesService.Item, genericType=class SalesService.Item.
添加
解决了这个问题org.codehaus.jackson.jaxrs
在web.xml这样
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>examples.rest.school</display-name>
<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>SalesService,org.codehaus.jackson.jaxrs</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</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>
添加了 4 个 jackson .JAR 文件之后
并将它们添加到库文件夹中(参考)