gpt4 book ai didi

java - 将 JSONWithPadding (Jersey) 与替代 mime 类型结合使用

转载 作者:行者123 更新时间:2023-12-01 23:13:00 25 4
gpt4 key购买 nike

当使用 Jersey 和 JSONWithPadding 与 Accept header 时,我在使用此 header 发出请求时遇到问题

接受:application/vnd-foo.bar+javascript(应返回 jsonp)

我收到以下消息:

Feb 05, 2014 11:46:29 AM com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider writeTo
SEVERE: A message body writer for Java type, [com.example.SomeEntity@4fc0e1e3], and MIME media type, application/vnd-foo.bar+javascript; charset=UTF-8, was not found.

使用以下 header 发出请求效果很好

接受:application/json(返回 json)
接受:application/vnd-foo.bar+json(返回json)
接受:application/javascript(返回 jsonp)

我没有显式配置服务来像 application/json 一样处理 application/vnd-foo.bar+json,所以我希望 application/vnd-foo.bar+javascript 像 application/javascript 一样处理。

@GET
@Produces({ "application/json", "application/vnd-foo.bar+json", "application/javascript",
"application/vnd-foo.bar+javascript" })
public JSONWithPadding get(@QueryParam("callback") String callback) {
return new JSONWithPadding(someListOfObjects, callback);
}

关于如何像 application/javascript 一样处理 application/vnd-foo.bar+javascript 有什么想法吗?

最佳答案

在这种情况下,您需要从 Jersey 1 扩展名为 JSONWithPaddingProvider 的 JSONP MessageBodyWriter。不幸的是,JSONWithPaddingProvider#isJavascript() 是私有(private)的,否则会更容易:

@Provider
public class CustomJSONWithPaddingProvider extends JSONWithPaddingProvider {

@Override
public void writeTo(final JSONWithPadding t,
final Class<?> type,
final Type genericType,
final Annotation[] annotations,
final MediaType mediaType,
final MultivaluedMap<String, Object> httpHeaders,
final OutputStream entityStream)
throws IOException, WebApplicationException {

final boolean isJavascript = mediaType
.getSubtype().endsWith("+javascript");
final MediaType mt = isJavascript ?
new MediaType("application", "javascript") : mediaType;

super.writeTo(t, type, genericType, annotations, mt, httpHeaders, entityStream);
}
}

关于java - 将 JSONWithPadding (Jersey) 与替代 mime 类型结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21576502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com