为什么HttpRequest在第二次读取时返回NULL?

时间:2013-09-12 12:08:22

标签: java web-services rest httprequest restlet

我正在使用RESTlet API 在 Java中创建webservices。我正在使用2.0稳定版。

在此,我在第二次阅读请求时遇到 NullPointerException 错误。

为了安全起见,我已在网络服务上应用过滤器。在过滤器类我检查请求包含预期的参数。如果成功,则调用webservice。

在webservice中处理时,我在请求中得到 NULL 。以下是我的Filter类 -

public class MyFilter extends Filter {

    public MyFilter(Context context) {
        super(context);
    }

    @Override
    protected int beforeHandle(Request request, Response response) {

        int result = STOP;
        try
        {
                String requestSt = request.getEntityAsText();
                // Check for validation 
        } catch (Exception e) {
            e.printStackTrace();
        }


        return result;
    }
}

当我第二次阅读请求时,它返回 NULL 。即使我只是写 -

System.out.println(request.getEntityAsText());

之前 -

String requestSt = request.getEntityAsText();

然后它还为行字符串requestSt = ....

提供 NullPointerException

请为我提供多次阅读请求的解决方案。

1 个答案:

答案 0 :(得分:2)

您可以包装传入请求实体,以确保在第一次阅读后不会丢失其内容。为此,您可以利用org.restlet.engine.io.BufferingRepresentation类。

这一行应该这样做:

request.setEntity(new BufferingRepresentation(request.getEntity());

您可能需要更新到版本2.1,这是当前的稳定版本。