gpt4 book ai didi

java - Restful WebService 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:02:19 24 4
gpt4 key购买 nike

我正在研究 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com