使用 JAXB 取消元帅/封送列表<字符串>

2022-08-31 22:42:34

我正在尝试创建一个非常简单的 REST 服务器。我只是有一个测试方法,它将返回字符串列表。代码如下:


@GET
@Path("/test2")
public List test2(){
    List list=new Vector();
    list.add("a");
    list.add("b");
    return list;
}

它给出以下错误:

SEVERE: A message body writer for Java type,
class java.util.Vector, and MIME media type,
application/octet-stream, was not found

我希望JAXB有一个简单类型的默认设置,如字符串,整数等。我想不是。这是我想象的:


<Strings>
  <String>a</String>
  <String>b</String>
</Strings>

使此方法起作用的最简单方法是什么?


答案 1

我使用了@LiorH的例子,并将其扩展为:


@XmlRootElement(name="List")
public class JaxbList<T>{
    protected List<T> list;

    public JaxbList(){}

    public JaxbList(List<T> list){
        this.list=list;
    }

    @XmlElement(name="Item")
    public List<T> getList(){
        return list;
    }
}

请注意,它使用泛型,因此您可以将其与 String 以外的其他类一起使用。现在,应用程序代码很简单:


    @GET
    @Path("/test2")
    public JaxbList test2(){
        List list=new Vector();
        list.add("a");
        list.add("b");
        return new JaxbList(list);
    }

为什么 JAXB 包中不存在这个简单的类?有人在其他地方看到类似的东西吗?


答案 2
@GET
@Path("/test2")
public Response test2(){
   List<String> list=new Vector<String>();
   list.add("a");
   list.add("b");

   final GenericEntity<List<String>> entity = new GenericEntity<List<String>>(list) { };
   return Response.ok().entity(entity).build();
}