您没有的杰克逊Enum格式

时间:2019-12-02 21:31:51

标签: java jackson-databind

我找不到在POJO中序列化/反序列化枚举的方法。我发现的大多数答案仅涉及可以更改的枚举。我无法更改枚举。

这是我的POJO的一个例子。

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpStatus;

@Data
@NoArgsConstructor
@JsonInclude(Include.NON_NULL)
public class TitleRatingCheckItemResponse {
  private String titleId;

  @NotNull private Status status;

  @NoArgsConstructor
  @Data
  public static class Status {

    @NotNull
    private HttpStatus code;
  }
}

当我将对象序列化为JSON时,这是我得到的示例

{
  "status": {
     "code": "OK"
  },
  "titleId": "titl_doc-1"
}

我想要的是一个像下面这样的JSON结构。

{
  "status": {
     "code": "200"
  },
  "titleId": "titl_doc-1"
}

要获得所需的JSON输出,我必须更改HttpStatus。这显然是不可能的,因为我没有HttpStatus的源代码。我有什么办法吗?

1 个答案:

答案 0 :(得分:1)

  1. 创建一个类

    suduko = [
        [1, 2, 3],
        [2, 3, 1],
        [3, 1, 2]
    ]
    

    请参见StdSerializer docs。还有另一个扩展的StdScalarDeserializer<HttpStatus>

  2. 在创建它的任何地方将其注册到def check_row(problem, row_number): seen = list() for cell in problem[row_number]: if cell in seen: return "Not ok" seen.append(cell) return "OK!" def check_column(problem, column_number): # up to you pass print(check_row(sudoku, 0)) print(check_row(sudoku, 1)) print(check_row(sudoku, 2))

    product_extras_id | product_id | extras_id
    ------------------------------------------
    1                 | 1          | 1
    2                 | 1          | 2
    3                 | 1          | 3
    4                 | 2          | 1
    5                 | 2          | 2
    6                 | 2          | 3
    7                 | 3          | 1
    8                 | 3          | 2
    9                 | 3          | 3
    

    或者,如果您只想针对此字段而不是所有public class HttpStatusSerializer extends StdSerializer<HttpStatus> { public HttpStatusSerializer() { super(HttpStatus.class); } @Override public void serialize(HttpStatus value, JsonGenerator gen, SerializerProvider serializers) { gen.writeString(String.valueOf(value.code())); // or whatever you want } } 使用自定义序列化器,则:

    ObjectMapper