我正在使用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;
}
但我收到错误:
SEVERE:找不到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
有什么想法吗?
答案 0 :(得分:2)
在封面下,泽西岛使用JAXB进行编组。首先,如果你没有包含jersey-json工件,它根本不会做JSON。这可能会导致您发布的错误。其次,JAXB使用注释来确定如何编组和解组事物。为了使用JAXB封送对象,必须使用@XmlRootElement对其类进行批注。如果一个类没有注释,那么Jersey会认为它不知道如何编组该对象,再次,你会得到同样的错误。我不是100%明确使用GenericEntity,我自己从未需要它,但我认为这不会对你有所帮助。我相信您的问题有两种常用的解决方案:
我认为大多数人倾向于选择第二种选择。您可以在jersey users mailing list archive。
中找到关于此问题的大量讨论答案 1 :(得分:1)
这看起来像类型擦除场景。您应该使用GenericEntity作为返回类型。你的代码应该是这样的:
public GenericEntity<Map<String, List>> getDBDetails() {
.
.
.
return new GenericEntity<Map<String, List>> (map) {};
}