【问题标题】:SDR: Exclude fields from json for associated objectSDR:从关联对象的 json 中排除字段
【发布时间】:2016-02-01 18:14:53
【问题描述】:

我有这样的实体:

   Restaurant
      String name
      User manager

   User
     String name
     Date lastLogin

当我执行 GET /restaurants 时,我想内联经理,但只能使用名称,而不是 lastLogin。

当我执行 GET /users 时,我想查看完整用户:name + lastLogin

所以我创建了一个 Restaurant-Projection 并将其作为摘录应用到 RestaurantRepo。但这会将完整用户嵌入到餐厅中。

当我也为用户创建一个摘录项目时,它省略了 lastLogin 字段,然后它按预期适用于餐厅,但不适用于用户,因为这里缺少 lastLogin。

我该如何解决这个问题?

谢谢

【问题讨论】:

  • 能否将餐厅投影代码添加到您的帖子中?
  • RestaurantProjection String getName() 用户 getManager()`
  • 很抱歉格式缺失,但它不起作用...既不是 4 个空格也不是 `

标签: spring-data-rest


【解决方案1】:

您可以这样做(来自spring data rest documentation 的示例)

@Projection(name = "virtual", types = { Person.class })
public interface VirtualProjection {

  @Value("#{target.firstName} #{target.lastName}") 
  String getFullName();

}

所以在你的情况下,这将导致这个投影:

@Projection(name = "restaurantWithManagerName", types = { Restaurant.class })
public interface RestaurantWithManagerNameProjection {

  String getName();

  @Value("#{target.manager.name}") 
  String getManagerName();

}

如果您想使用嵌套的User 对象保持原始结构,您可以通过为用户创建自定义简化界面并在投影中使用它来实现此目的:

public interface UserLight {
    String getName();
}


@Projection(name = "restaurantWithReducedManager", types = Restaurant.class)
public interface RestaurantWithManagerNameProjection {

    String getName();
    UserLight getManager();
}

【讨论】:

  • 是的,我知道这一点,但我希望经理作为 json 中的用户对象,而不是新的(虚拟)属性。
  • 我已经试过了,但是还是不行。似乎 json 序列化程序使用对象中的所有字段,而不仅仅是接口中的 getter。
  • 我建议您将存储库、实体和投影的代码添加到您的问题中。您已经尝试过的信息总是很有价值,也应该包含在您的问题中。试图回答您问题的人应该如何知道您已经评估了哪些路径?
猜你喜欢
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
相关资源
最近更新 更多