![](/img/trans.png)
[英]REST Assured - How to log Request only if response contains an HTTP error
[英]How to log REST request and response JSON objects
我想问您是否可以在没有 Spring 的情况下将日志系统添加到此 CORS 示例(仅 Java '标准'和 Z3EFBF6CDA26E0Z28 库)。
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet Filter implementation class CORSFilter
*/
// Enable it for Servlet 3.x implementations
/* @ WebFilter(asyncSupported = true, urlPatterns = { "/*" }) */
public class CORSFilter implements Filter {
/**
* Default constructor.
*/
public CORSFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
System.out.println("CORSFilter HTTP Request: " + request.getMethod());
// Authorize (allow) all domains to consume the content
((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Origin", "*");
((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Methods","GET, OPTIONS, HEAD, PUT, POST");
HttpServletResponse resp = (HttpServletResponse) servletResponse;
// For HTTP OPTIONS verb/method reply with ACCEPTED status code -- per CORS handshake
if (request.getMethod().equals("OPTIONS")) {
resp.setStatus(HttpServletResponse.SC_ACCEPTED);
return;
}
**//String jsonRequestObject = ....;**
// pass the request along the filter chain
chain.doFilter(request, servletResponse);
**//String jsonResponseObject = ....;**
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
如果您使用的是 jersey 实现,那么为什么要使用推荐的 jersey 过滤器“ContainerRequestFilter”和“ContainerResponseFilter”来实现过滤器接口 go
https://javapapers.com/web-service/intercept-jax-rs-request-with-jerseycontainerrequestfilter/
尝试使用下面的代码
public class LogHttpInterceptor implements ClientHttpRequestInterceptor {
final static Logger log = LoggerFactory.getLogger(LogHttpInterceptor.class);
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
traceRequest(request, body);
ClientHttpResponse response = execution.execute(request, body);
traceResponse(response);
return response;
}
private void traceRequest(HttpRequest request, byte[] body) throws IOException {
log.trace("request begin===========================================================================");
log.trace("URI : {}", request.getURI());
log.trace("Method : {}", request.getMethod());
log.trace("Headers : {}", request.getHeaders() );
log.trace("Request body: {}", new String(body, "UTF-8"));
log.trace("request end=============================================================================");
}
private void traceResponse(ClientHttpResponse response) throws IOException {
StringBuilder inputStringBuilder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getBody(), "UTF-8"));
String line = bufferedReader.readLine();
while (line != null) {
inputStringBuilder.append(line);
inputStringBuilder.append('\n');
line = bufferedReader.readLine();
}
log.trace("response begin==========================================================================");
log.trace("Status code : {}", response.getStatusCode());
log.trace("Status text : {}", response.getStatusText());
log.trace("Headers : {}", response.getHeaders());
log.trace("Response body: {}", inputStringBuilder.toString());
log.trace("response end===========================================================================");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.