Spring,JSON序列化程序,仅在某些情况下对字段进行序列化

迪茨(M.Dietz):

我有一个班级订单:

@Data
@Entity
public class Order {

  private List<Project> projects;

  // more fields
}

我的控制器中有两个API方法:

  @GetMapping
  public ResponseEntity<List<Order>> getOrders() {
    return ResponseEntity.ok(orderService.getOrders());
  }

  @GetMapping("/{id}")
  public ResponseEntity<Order> getOrder(@PathVariable long id) {
    return ResponseEntity.ok(orderService.getOrder(id));
  }

因此,在这种情况下projects,总是通过JSON发送,如果它的存在只是被序列化,如果它不存在则被延迟获取然后序列化。我可以通过用注释字段来避免将其序列化@JsonIgnore但问题是我想有时甚至不发送它。例如在getOrders()我不希望projects被序列化。getOrder(...)我想projects被序列化。有什么方法可以在运行时在自定义代码中或通过注释告诉我我想在一种特定情况下而不是另一种情况下发送它吗?我唯一想到的是-在序列化之前-我可以projects使用null 初始化并使用注释实体@JsonInclude(JsonInclude.Include.NON_NULL)这样就不会发送它,如果我想发送它,我可以避免用null初始化它。但是很显然,我不想遍历OrderO(n)中的每个对象只是为了将其初始化projects为null。

cameron1024:

使用“ JSON视图”很容易实现。

首先,定义一些类来表示每个视图(例如内部/外部):

public class OrderViews {
    public static class OnlySomeFields {}
    public static class AllFields extends OnlySomeFields {}
}

接下来,在您的课程中,为每个字段分配一个视图:

public class Order {

    @JsonView(OrderViews.OnlySomeFields.class)
    private String foo;

    @JsonView(OrderViews.AllFields.class)
    private String bar;

    // getters/setters/etc
}

然后,在控制器中,您可以指定每种方法要使用的视图:

@RestController
public class MyController {

    @JsonView(OrderViews.AllFields.class)
    @GetMapping("/with-all-fields")
    public Order getOrderAllFields() {
        return orderService.getOrder();
    }

    @JsonView(OrderViews.OnlySomeFields.class)
    @GetMapping("/with-some-fields")
    public Order getOrderAllFields() {
        return orderService.getOrder();
    }

}

采用这种设置,导航到/with-all-fields一个JSON含有回报foobar,而导航到/with-some-fields返回一个JSON仅含有foo

您可以使用此技术来选择性地序列化特定字段,并且应该能够将其应用于您的用例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Java

仅在不为null或不为空的情况下,Gson序列化字段

来自分类Dev

序列化器仅在关键关系中的某些字段

来自分类Dev

在某些问题未解决的情况下,如何在C#中反序列化json

来自分类Dev

如何在没有给定长度的情况下反序列化Bincode字段

来自分类Dev

在不更改模型的情况下更改模型序列化器中的字段类型

来自分类Dev

如何在不包含函数的情况下对对象进行JSON序列化并包括@property属性?

来自分类Dev

为什么在没有序列化程序的情况下使用Newtonsoft Json进行驼峰操作不起作用?

来自分类Dev

如何在不进行序列化的情况下Redis缓存大型C#对象?

来自分类Java

GSON-特定情况下的自定义序列化程序

来自分类Java

某些字段的Jackson JSON自定义序列化

来自分类Dev

在不反序列化的情况下处理JSON

来自分类Dev

在没有Spring的情况下解决JAX RS中的数组序列化

来自分类Dev

Spring JSON序列化,Gson反序列化

来自分类Dev

在不使用唯一属性名称的情况下反序列化JSON

来自分类Dev

如何在对象结构未知的情况下反序列化JSON对象

来自分类Dev

在响应中缺少属性名称的情况下反序列化JSON

来自分类Java

使用Jackson(JSON)进行序列化-是否获得“找不到序列化程序”?

来自分类Dev

有没有一种方法可以在不使用python GIL的情况下进行序列化/反序列化

来自分类Java

如何在不实际序列化对象的情况下估计Java中对象的序列化大小?

来自分类Dev

为什么在序列化/反序列化的情况下仅创建一个父对象

来自分类Dev

如何在没有包含元素的情况下序列化“任何”元素的序列

来自分类Java

JSON:@Transient字段未序列化

来自分类Java

在使用Jackson进行类序列化时添加类型信息,以便可以在不使用注释的情况下使用接口类型反序列化?

来自分类Dev

为什么我看到Enum常数的字段值确实被序列化/反序列化了?在哪种情况下,枚举中未序列化的是什么?

来自分类Java

从JSON数组的POJO进行序列化

来自分类Dev

JSON序列化程序写入过多的']'

来自分类Dev

如何在不进行序列化的情况下将对象作为输入传递给WorkManager?

来自分类Dev

Serilog序列化字段

来自分类Java

Spring Boot序列化JSON

TOP 榜单

热门标签

归档