编程语言
首页 > 编程语言> > java-Restful WebService的问题

java-Restful WebService的问题

作者:互联网

我正在使用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: 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进行封送处理.首先,如果您没有包含jersey-json工件,那么它将完全不执行JSON.这可能会导致您发布的错误.其次,JAXB使用注释来确定如何对事物进行封送和封送.为了使用JAXB封送对象,必须使用@XmlRootElement注释其类.如果未对类进行注释,Jersey会认为它不知道如何封送对象,并且同样,您将得到相同的错误. .我自己对GenericEntity的使用并不了解100%,但我认为这对您没有帮助.我相信有两种通常可以解决您的问题的解决方案:

>将地图包裹在JAXBElement中.
>用@XmlRootElement注释的地图编写您自己的包装器.

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

标签:jax-rs,jersey,java
来源: https://codeday.me/bug/20191208/2093119.html