相关疑难解决方法(0)

如何重用Jersey的JSON/JAXB进行序列化?

我有一个使用Jersey实现的JAX-RS REST服务.JAX-RS/Jersey的一个很酷的功能就是如何轻松地将POJO变成REST服务,只需简单地添加一些Java注释......包括一个简单的机制,用于将POJO转换为JSON - 使用JAXB注释.

现在,我希望能够利用这种非常酷的JSON-ifying功能用于非REST目的 - 我希望能够将这些对象中的一些序列化为磁盘,作为JSON文本.这是我想要序列化的示例JAXB对象:

@XmlRootElement(name = "user")
public class UserInfoImpl implements UserInfo {

    public UserInfoImpl() {} 

    public UserInfoImpl(String user, String details) {
        this.user = user;
        this.details = details;
    }

    public String getUser() { return user; }
    public void setUser(String user) { this.user = user; }

    public String getDetails() { return details; }
    public void setDetails(String details) { this.details = details; }

    private String user;
    private String details;
}
Run Code Online (Sandbox Code Playgroud)

泽西可以将其中一个变成json而没有额外的信息.我想知道泽西是否已经在API中公开了这个功能,以满足我的需求?到目前为止我找不到运气了......

谢谢!

更新2009-07-09:我已经了解到我可以使用Providers对象几乎完全按照我的意愿行事:

  @Context Providers ps; …
Run Code Online (Sandbox Code Playgroud)

json jax-rs jersey

28
推荐指数
3
解决办法
5万
查看次数

如何让 Jersey/Jackson 序列化空列表;作为数组的单个元素列表

使用 Jersey 和 Jackson 创建 REST 接口,当列表字段中有 0 或 1 个元素时,如何将列表字段序列化为列表。例如:

@XmlRootElement(name="foo")
public class Foo {
  @XmlElement
  public List<Bar> getBars() {
    return this.bars;
  }
}

@Path("foo")
public FooResource {
  @GET
  public Foo getFoo() {
    return theFoo;
  }
}
Run Code Online (Sandbox Code Playgroud)

当 bar 没有元素时,结果序列化为null,当它包含单个元素时,它序列化为该元素,而不是包含单个元素的数组。有没有办法让这些总是序列化为数组?

作为参考,我使用的是 Jersey 1.10 和 Jackson 1.9.2。

java json jersey jackson

6
推荐指数
1
解决办法
1万
查看次数

从JAXB和Jersey生成更多json,如json

我使用JAXB创建的数据模型,我可以直接生成XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\
<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0">
<artist-list offset="0" count="1">
   <artist ext:score="100" type="Group" id="4302e264-1cf0-4d1f-aca7-2a6f89e34b36">       
       <name>Farming Incident</name>
       <ipi-list>
          <ipi>1001</ipi>
       </ipi-list>
   </artist>
</artist-list>
</metadata>
Run Code Online (Sandbox Code Playgroud)

并且在Jersey的帮助下也使用Natural表示法生成JSon

"artist-list":
    {"offset":0,
     "count":1,
     "artist":[
         {"score":"100",
          "type":"Group",
          "id":"4302e264-1cf0-4d1faca7-2a6f89e34b36",
          "name":"Farming Incident",
          "ipi-list":
              {
                  "ipi":[
                       "1001"
                    ]
             }
          }]
     }
Run Code Online (Sandbox Code Playgroud)

Xml很好,json几乎没有问题,因为Json直接支持具有像ipi-list和artist-list这样的元素的数组似乎不是json,是否有可能从我的模型生成更多类似json的json?

请求附加信息 json是使用JAXB和Jersey 从这个MMD模式http://svn.musicbrainz.org/mmd-schema/trunk/brainz-mmd2-jaxb/src/main/resources/musicbrainz_mmd-2.0.xsd生成的 ,请参阅 http://svn.musicbrainz.org/search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.javahttp://svn.musicbrainz.org/search_server/trunk /servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java

关键是我希望能够从一个模式生成Json和XML,但是显然Json看起来不对,所以我正在寻找一种方法来改进它(我真的没有任何经验我自己)

java json jaxb jersey

5
推荐指数
1
解决办法
5363
查看次数

Jersey JSON编组空列表

我们有一个Java列表的对象,它是通过泽西创建的JSON编组的.

List被称为"行".当有数据我们有:

{"records":"1","page":"1","total":"1","rows":[{"id":"692334","cell":["ECS","D","201009","","0","ABCD","11","11","","201009"]}]}
Run Code Online (Sandbox Code Playgroud)

当我们没有数据时:

{"page":0,"records":0,"total":0}
Run Code Online (Sandbox Code Playgroud)

rows即使列表的大小为0,我们怎样才能使泽西包括该字段?我们想要的是:

{"page":0,"records":0,"total":0,"rows":[]}
Run Code Online (Sandbox Code Playgroud)

请注意,我们已经在使用JAXB ContextResolver来确保单行的JSON正确.不确定我们是否可以配置此解析器来解决我们的问题.

java json list jaxb jersey

4
推荐指数
1
解决办法
3548
查看次数

我可以让Jersey在全局/默认情况下使用自然JSON表示法吗?

我正在使用Jersey为服务构建REST API.我希望能够接受并返回JSON和XML,并且主要使用它,但我不喜欢Jersey喜欢吐出的JSON的默认"映射"风格.

我知道更新的"自然"符号(来自http://jersey.java.net/nonav/documentation/latest/json.html,我会详细引用它,因为它显然存在默认"映射"的问题符号):

在使用映射的JSON表示法一段时间后,很明显,需要手动配置所有各种事情可能有点问题.为了避免手动工作,在Jersey版本1.0.2中引入了一种新的,自然的JSON表示法.使用自然符号,Jersey会自动确定需要处理的各个项目,因此您无需进行任何类型的手动配置.Java数组和列表映射到JSON数组,即使对于单元素情况也是如此.Java数字和布尔值正确映射到JSON数字和布尔值,你不需要打扰XML属性,就像在JSON中一样,它们保留原始名称

并且想在任何地方使用它,但我无法弄清楚如何使用它.我通过Tomcat的XML配置文件实例化/配置Jersey - 使用我认为是与servlet/servlet-class/init-param标签的正常舞蹈 - 但是我无法找到关于它是否或如何的文档可以从那里指定JSONConfiguration选项.

我也尝试实现自己的ContextResolver,它应用了我从Java代码实例化的JSONJAXBContext,我可以在其中应用JSONConfiguration.natural()(这个例子就像这个答案).这是有效的,但仅适用于我在该代码中明确列出的类型,并传递给JSONJAXBContext构造函数.这个额外的代码不仅可以编写和维护,而且如果我添加更多的数据类也会更改,但它不适用于像List这样的东西.

有没有办法告诉泽西岛只使用自然符号而不是映射符号,总是和所有类型?

java json jax-rs jersey

4
推荐指数
1
解决办法
2888
查看次数

标签 统计

jersey ×5

json ×5

java ×4

jax-rs ×2

jaxb ×2

jackson ×1

list ×1