Java 杰克逊-唐';不要将@JsonProperty与@JsonPOJOBuilder或@JsonCreator一起使用

Java 杰克逊-唐';不要将@JsonProperty与@JsonPOJOBuilder或@JsonCreator一起使用,java,spring-boot,jackson,Java,Spring Boot,Jackson,先决条件: Java/Spring启动 PropertyNamingStrategy.UpperCamelCaseStrategy已设置 DTO类字段是驼峰式的 Json字段是大写的 DTO/Json字段名是对齐的 保持DTO类不变,避免对字段使用setter 要求: 在DTO类中不使用@JsonProperty进行反序列化(隐式) 尝试将嵌套生成器类与@JsonPOJOBuilder或构造函数一起使用,并用@JsonCreator注释,但是: @JsonPOJOBuilder在set

先决条件:

  • Java/Spring启动
  • PropertyNamingStrategy.UpperCamelCaseStrategy
    已设置
  • DTO类字段是驼峰式的
  • Json字段是大写的
  • DTO/Json字段名是对齐的
  • 保持DTO类不变,避免对字段使用setter
要求:

  • 在DTO类中不使用
    @JsonProperty
    进行反序列化(隐式)
尝试将嵌套生成器类与
@JsonPOJOBuilder
或构造函数一起使用,并用
@JsonCreator
注释,但是:

  • @JsonPOJOBuilder
    setField()
    方法上没有
    @jsonproperty
    的带注释的生成器类-
    setField()
    方法在 反序列化
  • 带有
    @JsonCreator
    注释的构造函数-明确要求参数上有
    @JsonProperty
我已经写了一个解决方案。总之:

  • 使用Java1.8
  • 使用-parameters参数编译
  • 使用并注册jackson模块参数名称
  • 上述操作将导致Jackson在字节码中查找构造函数参数的名称,而不需要构造函数上的
    @JsonCreator
    @JsonProperty


    关于命名策略,您可以轻松地将其设置为,尽管我还没有测试它,但应该使用无注释的构造函数。

    当使用@JsonCreator用例时

    我在下面的例子中使用了snake case。 @JsonCreator
    公共ApiResponseBuilder(@JsonProperty(“status_code”)int statusCode,@JsonProperty(“status_message”)String statusMessage){

    我只想知道这是否可行,也就是说接受不可能的答案。