我有一个用例,其中我的应用程序托管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这是一个更好的解决方案,我认为:) –