java - Restful WebService 的问题

标签 java jersey jax-rs

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

@Path("/test")

公共(public)类测试服务{

@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;

}

但我收到错误:

SEVERE: A message body writer for Java type, class java.util.HashMap, and MIME media type, application/json, was not found Mar 3, 2011 3:32:41 PM com.sun.jersey.server.impl.application.WebApplicationImpl onException SEVERE: Internal server error javax.ws.rs.WebApplicationException

有什么想法吗?

最佳答案

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

  1. 将您的 map 包装在 JAXBElement 中.
  2. 为用@XmlRootElement 注释的 map 编写您自己的包装器。

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

关于java - Restful WebService 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179223/

相关文章:

java - 如何获得I.P.访问您的网络服务的客户端地址?

java - 2014 年实现 Java REST Web 服务的最简单框架

java - 静态方法或 getter 上的 Bean 验证列表<?>

java.sql.日期格式化

java - 从 Linux 获取 Java 应用程序的正确路径文件

java - 使用 oAuth 2.0 保护基于 Jersey 的 REST 服务

java - 如何为@PathParam 使用自定义类型?

java - 如何返回带有消息的响应,jax rs

java - Exception 类是检查异常还是非检查异常?

java - 如何计算使用 servlet 创建的文档的 XML 标签数量