我需要记录传入的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)
        }
    }
}

这将按预期记录传入的请求。

但是现在在我的 Controller 中,请求为空,无法用于构建我的域对象:
 class InquiryHandlerController {
  def save(Inquiry inquiryInstance) {
   ... *** inquiryInstance is null here
  }
 }

我想问题是,该请求已在RequestWrapper中读取,因此无法在magic requestToDomain转换中再次读取。

那么如何将新的RequestWrapper Object而不是原始的request传递给 Controller ​​?

最佳答案

终于找到了解决方案:

使用grailsplugin:1.1版中的grails-httplogger做正确的包装程序,因此现在可以记录和使用。
https://github.com/prumps/grails-httplogger

10-08 02:05