【问题标题】:Problem with Restful WebServiceRestful WebService 的问题
【发布时间】:2011-07-15 11:21:29
【问题描述】:

我正在开发 RestFul Webservice,我编写了一个小的 restful 服务,它返回一个 json 数据,这是我的代码:

@Path("/test")

公共类 TestService {

@GET
@Produces(MediaType.APPLICATION_JSON)
public String sayHello() {
    return "<h6> Hello, Welcome to the world of REST (Plain Text) </h6>";
}
@GET
@Path("dbdetails")
@Produces(MediaType.APPLICATION_JSON)
public Map<String, List> getDBDetails() {
    System.out.println("ramesh kumar ");
    List<ProductCategories> list = new ArrayList<ProductCategories>();
    HashMap<String,List> map = new HashMap<String,List>();
    ProductCategories cat = new ProductCategories();
    cat.setId(1);
    cat.setImage("Image21");
    cat.setName("Electronics");
    cat.setRowid(111);
    cat.setType("CatType");
    list.add(cat);
    map.put("Ramesh",list);
    System.out.println("ramesh kumar ");
    return map;

}

但我收到错误:

严重:找不到 Java 类型、java.util.HashMap 类和 MIME 媒体类型 application/json 的消息正文编写器 2011 年 3 月 3 日下午 3:32:41 com.sun.jersey.server.impl.application.WebApplicationImpl onException 严重:内部服务器错误 javax.ws.rs.WebApplicationException

有什么想法吗?

【问题讨论】:

  • 你需要一个比“restful webservice 问题”更吸引人的标题。

标签: java jersey jax-rs


【解决方案1】:

在幕后,Jersey 使用 JAXB 进行编组。首先,如果您没有包含 jersey-json 工件,它根本不会执行 JSON。这可能会导致您发布的错误。其次,JAXB 使用注释来确定如何编组和解组事物。为了用 JAXB 编组一个对象,它的类必须用 @XmlRootElement 注释。如果一个类没有这样注释,Jersey 会认为它不知道如何编组对象,同样,你会得到同样的错误。我对 GenericEntity 的使用不是 100% 清楚,我自己从来不需要它,但我认为这对你没有帮助。我相信有两种普遍接受的解决方案可以解决您的问题:

  1. 将您的地图封装在 JAXBElement 中。
  2. 为带有@XmlRootElement 注释的地图编写您自己的包装器。

我认为大多数人倾向于选择第二个选项。您可以在jersey users mailing list archive 中找到有关此问题的大量讨论。

【讨论】:

  • 这解决了我与Jersey 的问题。但是我没有带有RESTEasy 的@XmlRootElement 注释,它仍然有效。我还能用Jersey 避免它,这样我就不必编辑我所有的 POJO 了吗?
【解决方案2】:

这看起来像类型擦除场景。您应该使用 GenericEntity 作为返回类型。你的代码应该是这样的:

public GenericEntity<Map<String, List>> getDBDetails() { 
.
.
.
        return  new GenericEntity<Map<String, List>> (map) {};
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多