当前位置: 首页 > 知识库问答 >
问题:

在Jackson上序列化XML的顺序注释不起作用

李胤
2023-03-14

我已经在google上搜索了将近一天这个问题,并尝试了几个修复(包括StackOverflow的4或5个),但都没有成功。我有一个带注释的POJO,用于Jackson 2.10.2

@JacksonXmlRootElement(localName = "request")
public class PdfExportQuery {

  @JacksonXmlProperty(localName = "user", isAttribute = true)
  private String username;

  @JacksonXmlProperty(localName = "pwd", isAttribute = true)
  private String password;

  @JacksonXmlProperty(localName = "putdoc")
  private XmlPutDoc putdoc;

  @JacksonXmlElementWrapper(useWrapping = false)
  @JacksonXmlProperty(localName = "import", isAttribute = true)
  private List<XmlPdfImport> imports;

  ... getters and setters
}

我使用这个POJO为一些外部请求创建XML。一切都很好,但现在我需要重新排序生成的XML中的字段,似乎什么都不起作用。

我首先尝试在班级层面进行设置:

@JsonPropertyOrder({"putdoc"}) (Using only the field and localName)
or
@JsonPropertyOrder({"putdoc", "user", "pwd", "import"}) (Using all fields and localName)
or
@JsonPropertyOrder({"putdoc", "username", "password", "imports"}) (Using all fields and the java property name)

然后,我尝试使用以下命令设置每个字段的顺序:

@JsonProperty(1)
or
@JsonProperty(value="putdoc", index = 1)

我还尝试在所有字段上设置JsonProperty,并且只在我最开始感兴趣的字段上设置。

我也尝试过:

  • 删除所有@JacksonXmlProperty并在每个字段上只留下@JsonProperty
  • 合并类中的@JsonProperty tyorder和每个字段上的@JsonProperty
  • 检查所有注释是否从com.fasterxml.jackson.annotation包导入

无论我做什么,生成的XML总是具有相同的顺序,所有的顺序注释似乎都被完全忽略了。

共有1个答案

邢璞
2023-03-14

我找不到一种方法让它与注释一起工作。我需要为类实现自定义序列化程序,以便更改顺序。

 类似资料:
  • 我一直在阅读关于Jackson XML反序列化的教程(#1,#2)。我试图通过编写一些java代码来遵循示例: 根据教程,这将产生以下输出: 但是,它会导致以下错误输出: 属性顺序不正确,“id”字段包含不正确的XML元素,“note”字段包含不正确。据说,各种java注释应该会改变Jackson的行为,但似乎所有注释都被忽略了。有人知道这是为什么吗? 这是jackson xml databind

  • 我们有一张350列的桌子。pojo类被生成,getter命令被打乱。试图使用jackson提供的csvmapper,但它会根据getter顺序生成csv@JsonPropertyOrder也不适合使用,因为有很多列。我们用xml维护列顺序,并且可以在运行时生成字段顺序数组。我们可以在运行时重写以提供属性排序的字段名数组吗?我们可以使用注释内省器进行自定义吗?

  • 我阅读了Jackson的annotations文档,但是我仍然找不到如何从annotations调用自定义序列化程序来序列化< code>java.sql.Date对象。 但是注释似乎只接受布尔值作为参数,而注释doc则表示: @JsonValue(method):用于标记返回值用作对象序列化的方法;通常用于标记生成字符串的方法(如toString())以生成JSON原语值序列化块引号 我是否使用

  • 多年来,我一直在SF2和SF3上使用组注释。我在试SF4.1。当我向endpoint发送GET时,得到的是一个空JSON。 my composer.json中有趣的部分: 配置: 实体 和endpointAPI控制器: 如果我删除“$context”- 任何想法?谢谢! 调试信息: 选择以下服务之一以显示其信息[fos_rest.serializer.jms]:[0]fos_rest.serial

  • 例如: 我知道有jackson注解可以这样做,但是我的字段已经用我的持久性注解进行了注解,所以我想避免重复,因为我已经有了我想忽略的注解的字段