【发布时间】:2021-02-17 08:30:15
【问题描述】:
我有一个 Java 项目,我正在使用 Servlet 来处理 http 请求。 我也使用 Spring
当我收到创建新对象(例如帐户)的请求时,我还想返回带有新创建对象的 GET URL 的“位置”标头。 例如:位置:/accounts/1000
我了解标头已添加到 Servlet 过滤器(如果我错了,请纠正我)
public class ApiLogFilter implements Filter {
private static final Logger LOGGER = LoggerFactory.getLogger("apilogger");
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = ((HttpServletResponse) servletResponse);
httpServletResponse.addHeader( "Location","the location value");
try {
filterChain.doFilter(servletRequest, servletResponse);
} finally {
String queryString = httpServletRequest.getQueryString() != null ? httpServletRequest.getQueryString() : "N/A";
String logMessage = "URL: " + httpServletRequest.getRequestURL() + ", Query String: " + queryString + ", Response Status: " + httpServletResponse.getStatus() ;
LOGGER.info(logMessage);
}
}
@Override
public void destroy() {
}
}
但我不明白如何从 API 获取位置值
@RequestMapping("/accounts")
public class IgnoreRuleController {
private AccountService accountService;
public void setIgnoreRuleService(IgnoreRuleService ignoreRuleService) {
this.accountService = ignoreRuleService;
}
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String createAccount(@RequestBody Account account) {
return new Gson().toJson(accountService.createAccount(account));
}
}
【问题讨论】:
标签: java spring servlets http-headers servlet-filters