【发布时间】:2015-01-26 20:15:03
【问题描述】:
我正在开发 Restful 服务。问题发生在我们迁移到 Glassfish 4.1 之后。错误字符串是:
严重:找不到媒体类型=application/xml、类型=...的 MessageBodyWriter。
但我的课程消耗应用程序/json。这是一个例子:
@Path("get_customer_info")
@Consumes("application/json;charset=utf8")
public class CustomerInfoResource {
@Context
private UriInfo context;
public CustomerInfoResource () {
}
@POST
public Player getPlayerInfo(){
....
}
}
我已完成以下操作,但无法解决: 添加了所有 jersey jars 版本 2.13 , jackson jars 2.4.3 。还添加了 jersey-media-json-jackson-2.13.jar,其中包含 org.glassfish.jersey.jackson.JacksonFeature 类。顺便说一下ApplicationConfig类是:
@javax.ws.rs.ApplicationPath("resources")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
try {
Class jsonProvider = Class.forName("org.glassfish.jersey.jackson.JacksonFeature");
resources.add(jsonProvider);
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
addRestResourceClasses(resources);
return resources;
}
【问题讨论】:
-
您是否尝试在类级别添加@Produces 注释。似乎在编写响应时出现了问题。
-
当然试过@Produces 但也没有解决。实际上,该项目在 Glassfish 4.0 中运行。该问题仅在 Glassfish 4.1 中出现。
-
我认为原因是您的 post 方法默认生成 XML,而您的
Player类不可序列化。如果您想轻松解决这个问题,并且不介意返回 Json,您可以使用 Gson 之类的东西,然后执行以下操作:BagOfPrimitives obj = new BagOfPrimitives(); Gson gson = new Gson(); String json = gson.toJson(obj);
标签: java json rest glassfish media-type