如何为Spring-rest构建自定义@Projections?

时间:2016-02-03 17:02:48

标签: java spring spring-data spring-rest

@Entity可以直接公开DTO域对象,甚至提供@Projection(name = "personDTO", types = { Person.class }) public interface PersonDTO { @Value("#{target.firstName} #{target.lastName}") //SPeL String getFullName(); } 投影,如下所示:

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

问题:如果我想自己只构建某些的dto字段怎么办?例如,在firstname字段上有某种条件,并根据这个或其他方式填充它。这可能吗?

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

@shop.calulcateTotal()

这里逻辑被导出到@shop,但他们没有在示例中告诉这个@Service bean是如何注入的。我认为这是一个<script type="text/javascript" src="http://localhost/fancybox/jquery.mousewheel-3.0.6.pack.js"></script> <script type="text/javascript" src="http://localhost/fancybox/jquery.fancybox.js?v=2.1.5"></script> <link rel="stylesheet" type="text/css" href="http://localhost/fancybox/jquery.fancybox.css?v=2.1.5" media="screen" /> <link rel="stylesheet" type="text/css" href="http://localhost/fancybox/helpers/jquery.fancybox-buttons.css?v=1.0.5" /> <script type="text/javascript" src="http://localhost/fancybox/helpers/jquery.fancybox-buttons.js?v=1.0.5"></script> <link rel="stylesheet" type="text/css" href="http://localhost/fancybox/helpers/jquery.fancybox-thumbs.css?v=1.0.7" /> <script type="text/javascript" src="http://localhost/fancybox/helpers/jquery.fancybox-thumbs.js?v=1.0.7"></script> <script type="text/javascript" src="http://localhost/fancybox/helpers/jquery.fancybox-media.js?v=1.0.6"></script> ,但不知道如何进入。

1 个答案:

答案 0 :(得分:0)

在您发布的示例下面说。

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

  

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

由于您的预测已经由spring管理,因此您不需要注入它。春天的魔法为你照顾它。