Grails 2.4.4 请求对象记录
Grails 2.4.4 request object logging
我需要记录传入的 REST 请求 (xml)。
所以我创建了一个
public class RequestWrapper extends HttpServletRequestWrapper {
private String _body;
public RequestWrapper(HttpServletRequest request) throws IOException {
super(request);
_body = "";
BufferedReader bufferedReader = request.getReader();
String line;
while ((line = bufferedReader.readLine()) != null){
_body += line;
}
}
现在我使用过滤器注销传入请求:
class XmlogFilterFilters {
def filters = {
all(controller:'*', action:'*') {
before = {
RequestWrapper wrappedRequest = new RequestWrapper(request)
log.info(wrappedRequest.reader.text)
}
}
}
这会按预期记录传入请求。
但现在在我的控制器中,请求是空的,不能用于构建我的域对象:
class InquiryHandlerController {
def save(Inquiry inquiryInstance) {
... *** inquiryInstance is null here
}
}
我想问题是,请求已经在 RequestWrapper
中读取,因此无法在 magic requestToDomain 转换.[=16 中再次读取=]
那么如何将新的 RequestWrapper Object
而不是原来的 request
传递给控制器?
终于找到了解决办法:
使用 grailsplugin:1.1 版中的 grails-httplogger 做了正确的包装,因此日志记录和消费现在可以正常工作。
https://github.com/prumps/grails-httplogger
我需要记录传入的 REST 请求 (xml)。 所以我创建了一个
public class RequestWrapper extends HttpServletRequestWrapper {
private String _body;
public RequestWrapper(HttpServletRequest request) throws IOException {
super(request);
_body = "";
BufferedReader bufferedReader = request.getReader();
String line;
while ((line = bufferedReader.readLine()) != null){
_body += line;
}
}
现在我使用过滤器注销传入请求:
class XmlogFilterFilters {
def filters = {
all(controller:'*', action:'*') {
before = {
RequestWrapper wrappedRequest = new RequestWrapper(request)
log.info(wrappedRequest.reader.text)
}
}
}
这会按预期记录传入请求。
但现在在我的控制器中,请求是空的,不能用于构建我的域对象:
class InquiryHandlerController {
def save(Inquiry inquiryInstance) {
... *** inquiryInstance is null here
}
}
我想问题是,请求已经在 RequestWrapper
中读取,因此无法在 magic requestToDomain 转换.[=16 中再次读取=]
那么如何将新的 RequestWrapper Object
而不是原来的 request
传递给控制器?
终于找到了解决办法:
使用 grailsplugin:1.1 版中的 grails-httplogger 做了正确的包装,因此日志记录和消费现在可以正常工作。 https://github.com/prumps/grails-httplogger