我有一個用例,其中我的應用程序託管REST API和Web應用程序,我們只需將自定義標題添加到REST API。 REST API通過Spring Data REST啓用。通常我們可以使用Servlet Filter來實現這一點,但我們需要編寫隔離請求到REST API的邏輯並添加自定義標頭。如果Spring Data REST API允許爲其生成的所有響應添加默認標題,那將會很好。你怎麼看?不要說我懶惰:)REST API的自定義默認標題僅使用Spring Data REST
3
A
回答
4
由於Spring Data REST建立在Spring MVC之上,最簡單的方法是按照reference documentation中的描述配置自定義HandlerInterceptor
。
使用Spring Data REST最簡單的方法是擴展RepositoryRestMvcConfiguration
並覆蓋repositoryExporterHandlerMapping
,調用父方法,然後在其上調用….setInterceptors(…)
。
8
爲鄉親尋找實際的實施細則..
攔截
public class CustomInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("adding CORS headers.....");
response.addHeader("HEADER-NAME", "HEADER-VALUE");
return true;
}
}
Java的配置
@Configuration
public class RepositoryConfig extends
RepositoryRestMvcConfiguration {
@Override
public RequestMappingHandlerMapping repositoryExporterHandlerMapping() {
RequestMappingHandlerMapping mapping = super
.repositoryExporterHandlerMapping();
mapping.setInterceptors(new Object[] { new CustomInterceptor() });
return mapping;
}
}
+1
對於那些未來搜索這個問題的人可以參考http://stackoverflow.com/ a/32952220/4283455這是一個更好的解決方案,我認爲:) –
1
最後我設法讓自定義攔截器對彈簧的數據也正在安裝-rest 2.4.1.RELEASE。
@Configuration
public class RestMvcConfig extends RepositoryRestMvcConfiguration {
@Autowired UserInterceptor userInterceptor;
@Autowired ApplicationContext applicationContext;
@Override
public DelegatingHandlerMapping restHandlerMapping() {
RepositoryRestHandlerMapping repositoryMapping = new RepositoryRestHandlerMapping(resourceMappings(), config());
repositoryMapping.setInterceptors(new Object[] { userInterceptor }); // FIXME: not nice way of defining interceptors
repositoryMapping.setJpaHelper(jpaHelper());
repositoryMapping.setApplicationContext(applicationContext);
repositoryMapping.afterPropertiesSet();
BasePathAwareHandlerMapping basePathMapping = new BasePathAwareHandlerMapping(config());
basePathMapping.setApplicationContext(applicationContext);
basePathMapping.afterPropertiesSet();
List<HandlerMapping> mappings = new ArrayList<HandlerMapping>();
mappings.add(basePathMapping);
mappings.add(repositoryMapping);
return new DelegatingHandlerMapping(mappings);
}
}
我不得不重寫restHandlerMapping
方法,複製粘貼它的內容,並添加一行repositoryMapping.setInterceptors
添加自定義攔截器,在我的情況下UserInterceptor
。
有沒有更好的方法?
相關問題
- 1. 使用Spring Data REST自定義端點
- 2. 自定義由Spring Data REST生成的默認查詢
- 3. Spring Data Rest使實體只讀默認
- 4. 如何僅使用Spring Data REST公開可寫的REST API?
- 5. Spring Data Rest和自定義存儲庫
- 6. Spring Data REST自定義查詢集成
- 7. 顯示Spring Data Rest的API
- 8. Spring Data Rest - 使用默認值的參數
- 9. Spring REST API:返回默認首選項
- 10. Spring Data Rest - 跨應用程序Rest Rest API
- 11. Spring REST API自定義異常處理
- 12. Spring Data Rest FetchType
- 13. 使用BrowserMob-Proxy REST api設置自定義標題
- 14. 如何禁用Spring Data REST存儲庫的默認暴露?
- 15. 如何暴露Spring Data Rest端點的自定義實現
- 16. 自定義URL WordPress REST API
- 17. 自定義notify_url在REST API
- 18. Spring Boot和Spring Data Rest
- 19. Spring MVC和Spring Data Rest
- 20. 加入spring-data-rest ontop spring-data-jpa
- 21. Spring Data Rest:僅在特定配置文件中啓用
- 22. 在Tomcat中禁用Spring MVC REST API的默認錯誤頁面
- 23. MailGun通過自定義標題POST到REST API的路由
- 24. 使用Spring實現REST Api
- 25. 如何使用Spring Data Rest公開resourceId
- 26. 如何使用Spring-data-rest替換ResourceAssemblerSupport
- 27. 使用Spring Data REST無法捕獲DataIntegrityViolationException
- 28. Spring-data-rest自描述實體
- 29. 春天DATA REST - 如何使用默認的春天實現
- 30. Salesforce的REST API自定義設置
感謝@Oliver_Gierke作品 – Stackee007
是的,這也適用於我,但是對於新版本,'repositoryExporterHandlerMapping'方法消失了,並且嘗試以類似的方式調整'restHandlerMapping'不起作用。使用'addInterceptors'也不起作用。 @Oliver_Gierke,定義Spring Data REST存儲庫攔截器的新方法是什麼? –
對於那些未來搜索這個問題的人可以參考http://stackoverflow.com/a/32952220/4283455這是一個更好的解決方案,我認爲:) –