我有多个休息端点。 userId(http标头)在所有端点中都很常见。我想应用一个逻辑,假设未设置则设置其默认值,或者如果在请求进入方法之前在请求中提供,则修剪它(例如:heartbeat)。我们怎样才能在spring boot rest mvc中实现这个目标。
@RestController
public class MyResource {
@RequestMapping(value = "/heartbeat", method= RequestMethod.GET)
public String heartbeat (@RequestHeader (value="userId", required=false) String userId)
{
...
}
}
答案 0 :(得分:1)
你可以试试吗?
@Configuration
@Slf4j
public class HttpHeaderModificationConfig implements Filter {
private static final String HEADER_DEMO_NAME = "name";
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
final HttpServletRequest req = (HttpServletRequest) request;
// modify HTTP Request Header
final HttpServletRequestWrapper reqWrapper = new HttpServletRequestWrapper(req) {
@Override
public String getHeader(String name) {
if (HEADER_DEMO_NAME.equals(name)) {
return "Changed";
}
return super.getHeader(name);
}
};
log.info("After Changed with Name {}", reqWrapper.getHeader(HEADER_DEMO_NAME));
chain.doFilter(reqWrapper, response);
}
}
答案 1 :(得分:0)
首先,您不应该以这种方式使用http标头。在您的情况下,在会话中存储/bin/sh -c /usr/bin/mongodb-mms-monitoring-agent -conf /etc/mongodb-mms/monitoring-agent.config >> /var/log/mongodb-mms/monitoring-agent.log 2>&1
/usr/bin/mongodb-mms-monitoring-agent -conf /etc/mongodb-mms/monitoring-agent.config
更为可取。
虽然你的目标可以通过使用拦截器来实现。以下是为每个请求设置标头的示例:
userId
答案 2 :(得分:0)
我可以考虑使用过滤器的一个选项,即创建一个过滤器以检查标题userId
并对其进行修剪(如果它存在),或者提供一个默认值(如果它不存在)并将其存储在另一个标题中,可以说{ {1}}。在您的控制器中,您可以轻松地使用自定义标头,以确保它会根据您的要求有效。您可以参考下面的文章来创建通用bean