【问题标题】:How do return Java List<String> Json using Jax-RS如何使用 Jax-RS 返回 Java List<String> Json
【发布时间】:2012-06-21 20:03:28
【问题描述】:

我想知道一个方法如何返回 List 的 JSON 数组,例如:

@GET 
@Produces("application/json")
public List<String> aMethod(){
  return Array.asList("text1", "text2", "text3");
}

我想知道,例如,如何在我的方法中接收 List 参数类型

@PUT
@Consumes("application/json") void otherMethod(List<String>){
   // do something ;
}

我已阅读有关 JaxbContext 的信息,我了解它对我的帮助。

【问题讨论】:

  • JAXB 用于 XML,你是不是把它和 JAX-RS 搞混了?
  • 好的,但是我如何使用 jax-rs 返回 List
  • @user268396 不,JAX-B 可用于自动序列化/反序列化进出 JAX-RS Web 服务的数据。
  • 我只想知道如何使用 jax-rs 或是否可以返回或接收 List
  • @Oleksi:JAXB 专为生成/使用 XML(毕竟是用于 XML 绑定的 Java 架构)而设计。但是,有一个库 (Jettison) 可让您通过 StaX 实现解析和发出 JSON。重点是:JAXB 没有任何 JSON 概念,因此对 JSON 的任何支持都依赖于将 JSON 改进为世界的 XML 模型 (StaX)。

标签: java json string list jaxb2


【解决方案1】:

使用 JAXB,支持两种类型的 List。第一个是元素列表,第二个是分隔字符串(“普通”XML 值或属性,使用某些分隔符将其解析为列表)。第一个似乎是你想要的(“数组”)。

参考见:http://jaxb.java.net/jaxb20-ed/api/javax/xml/bind/annotation/XmlList.html

您会注意到,在这两种情况下,您想要的 List 都需要被其他对象封装。从根本上说,XML(以及扩展的 JAXB)喜欢将所有内容追溯到单个根节点/对象。因此,要对其建模,您需要这样的东西:

@XmlRootElement(name="wrapper")
public abstract class ListWrapper {
   public List<String> names;
}

然后您的方法需要更改为接受/返回 ListWrapper 对象并从中提取实际的列表。

【讨论】:

  • 我已经想象过不可能直接返回 List。谢谢
【解决方案2】:

我尝试了同样的方法但没有成功,所以我最终将一个字符串打包到一个字段对象中。

return listWithString
                .stream()
                .map(
                        stringElement -> {
                            MyBoxObject bo = new MyBoxObject();
                            bo.setSomeField(stringElement);
                            return bo;
                        })
                .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2021-03-13
    • 1970-01-01
    相关资源
    最近更新 更多