1

我正在尝试将我的对象与 JAXB 注释一起用于我的 JAX-RS 资源的应用程序/json 输出。我正在使用 RestEasy(最新版本 - 7.1.1.Final 和 2.3.4.Final)在 JBoss AS7 上运行。问题是我想自定义我的 JSON 输出。我必须注意,我不在乎我会使用 Jettison 还是 Jackson,但我只能让 Jettison 正常工作(部署应用程序)而不会出错。如果可能的话,我也想只在我的对象上使用 JAXB 注释 - 但它不是必需的。

1)我想在 XmlAttribute 注释字段中省略“@”。我发现了属性如何使用 Jettison 进行操作,但我不知道如何在 JBoss AS7 上配置它。没有找到任何 ContextResolver 示例。

2)我想要“正常”的 JSON 数组,例如

@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlElementRef(type = Entry.class, required = false)
    // no difference with @XmlElement
    private Set<Entry> entries;
}

序列化为

{"entries":
  {"entry":[{...},{...},{...}]}
}

我希望

{"entries":
  [
   {"entry":{...}},
   {"entry":{...}},
   {"entry":{...}}      
  ]
}

或只是(省略 XmlRootElement)

{"entries":
 [{...},{...},{...}]
}

3)正如我所指出的,我不在乎我将使用哪个提供程序(Jettison/Jackson),但很难找到如何正确设置 maven 依赖项以使应用程序可以无错误地部署的工作示例。到目前为止,我正在使用:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>${resteasyVersion}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxb-provider</artifactId>
        <version>${resteasyVersion}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jettison-provider</artifactId>
        <version>${resteasyVersion}</version>
        <!--<scope>provided</scope>-->
        <exclusions>
            <exclusion>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-impl</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.xml.stream</groupId>
                <artifactId>stax-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

感谢所有答案

4

1 回答 1

0

到目前为止,我设法让 Jackson 工作并使用其提供者特定的注释(@JsonProperty ...等等)解决了我的问题。我试图只找到 JAXB 解决方案,但我也可以接受这个。

顺便说一句我的依赖

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>${resteasyVersion}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxb-provider</artifactId>
        <version>${resteasyVersion}</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson-provider</artifactId>
        <version>${resteasyVersion}</version>
    </dependency>
于 2012-10-04T15:31:41.600 回答