【问题标题】:Implementing a JSONP interceptor in Jersey在 Jersey 中实现 JSONP 拦截器
【发布时间】:2014-05-12 22:28:04
【问题描述】:

我想实现一个 JsonP 拦截器,我正在使用 Jersey。 (我将 AsyncResponses 与长轮询一起使用,我的 REST 方法返回 'void' 因此我无法使用 @JSONP 对其进行注释)

我的问题是我不知道如何获取查询参数。我需要知道“回调”方法名称。

我还尝试了一个常规的 Servlet 过滤器。它有效,但奇怪的是我得到了methodname() {my json} 而不是 medhodname({my json}).

所以我尝试了泽西方式。好像我需要一个 WriterInterceptor,但是如何获取查询参数?

这是我的代码:

@Provider
public class JsonpResponseFilter implements WriterInterceptor {

    @Override
    public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
        final String callback =  (String)context.getProperty("callback");
        if (null != callback) {         
            context.getOutputStream().write((callback+"(").getBytes());
        }
        context.proceed();
        if (null != callback) {         
            context.getOutputStream().write(')');
        }
    }
}

编辑:

我找到了一种获取查询参数的方法,但对我来说这似乎是一种黑客行为(见下文)。必须有一些更简单或更优雅的东西。有什么想法吗?

@Provider
public class JsonpResponseFilter implements WriterInterceptor {

    @Override
    public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {

        final ServiceLocator locator = ServiceLocatorClientProvider.getServiceLocator(context);
        ContainerRequestContext tmp = locator.getService(ContainerRequestContext.class);
        List<String> callbacks = tmp.getUriInfo().getQueryParameters().get("callback");
        String callback = (null == callbacks)? null:callbacks.get(0);
        ...

【问题讨论】:

    标签: jersey jsonp jersey-2.0


    【解决方案1】:

    一个不那么老套的解决方案是在你的类中注入一个提供者作为一个字段:

    @Inject
    private Provider<ContainerRequest> containerRequestProvider;
    

    从这里,您可以像这样访问查询参数:

    final ContainerRequest containerRequest = containerRequestProvider.get();
    final UriInfo uriInfo = containerRequest.getUriInfo();
    final MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters();
    final List<String> queryParameter = queryParameters.get("q");
    ...
    

    【讨论】:

    • 谢谢。您能否指出一些文档/最好 - 教程,教授 @Inject 的机制和用法?
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 2023-03-19
    • 2020-03-03
    • 2015-03-18
    • 2018-07-25
    • 2023-03-22
    • 2011-01-26
    • 2013-11-12
    相关资源
    最近更新 更多