我正在使用最新的Spring Data Rest,并且正在处理“ 创建* ” 之前 的事件。我的要求是还要捕获提交给“ 客户端 ” 模型的 POST 端点的HTTP标头。但是, RepositoryEventHandler 的接口未公开该接口。 ***
@Component @RepositoryEventHandler public class ClientEventHandler { @Autowired private ClientService clientService; @HandleBeforeCreate public void handleClientSave(Client client) { ... ... } }
我们如何处理事件并捕获HTTP标头?我想访问使用 @RequestHeader HttpHeaders headers的 Spring MVC之类的参数。
您可以简单地将请求自动连接到EventHandler的字段
@Component @RepositoryEventHandler public class ClientEventHandler { private HttpServletRequest request; public ClientEventHandler(HttpServletRequest request) { this.request = request; } @HandleBeforeCreate public void handleClientSave(Client client) { System.out.println("handling events like a pro"); Enumeration<String> names = request.getHeaderNames(); while (names.hasMoreElements()) System.out.println(names.nextElement()); } }
在给出的代码中,我使用了最干净的构造器注入,但是Field或Setter注入也应该工作。
哦,我刚刚注意到@Marc在评论中提出了这个建议……但我实际上尝试了:)