【问题标题】:How to build custom @Projections for spring-rest?如何为 spring-rest 构建自定义 @Projections?
【发布时间】:2016-05-13 00:23:49
【问题描述】:

spring-data-rest 可以直接暴露@Entity 域对象,甚至提供DTO 投影,如下所示:

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

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

问题:如果我只想自己构造 一些 dto 字段怎么办?例如,在名字字段上有某种条件,并基于此以一种或其他方式填充它。这可能吗?

Spring 提到了一个例子,但不幸的是它并不完整: https://spring.io/blog/2014/05/21/what-s-new-in-spring-data-dijkstra

@Projection(name = "summary", types = Order.class)
interface OrderSummary {
  @Value("#{@shop.calculateTotal(target)}")
  Money getTotal();
}

这里的逻辑被导出到@shop.calulcateTotal(),但是他们没有在示例中说明这个@shop bean 是如何在这里注入的。我假设这是@Service,但不知道如何获取它。

【问题讨论】:

    标签: java spring spring-data spring-rest


    【解决方案1】:

    在您发布的示例下方显示。

    https://spring.io/blog/2014/05/21/what-s-new-in-spring-data-dijkstra

    对于高级用例,您甚至可以为投影方法配备 @Value 以将 SpEL 表达式的结果返回给编组器。在我们的示例中,我们在名为 shop 的 Spring bean 上调用一个方法,并将代理目标实例交给它来计算订单总额,这可以考虑回扣、税收等。

    由于您的预测已经由 spring 管理,因此您实际上不需要注入它。 Spring Magic 为您解决。

    【讨论】:

    • 是的,但是我怎么知道哪个 bean 映射到 @shop
    • 你试过了吗?我没试过,但我猜任何豆子都有商店的ID。你也可以使用@Qualifier。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多