gpt4 book ai didi

java - 注释资源以生成 JSON,但在响应 header 中返回 "text/plain"

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:49 25 4
gpt4 key购买 nike

我目前正在实现一个网络 API

输出(如果有的话)将是 JSON,所以我所有的类都用预期的媒体类型注释。

@Produces(MediaType.APPLICATION_JSON)
public class CustomerResource {
...
}

这样我的类就会自动转换为 json

但是...

由于微软,他们的 IE 只支持 CORS,如果请求/响应类型是 text/plain http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

4. Only text/plain is supported for the request's Content-Type header

所以我需要强制我的应用程序在 header 中使用 text/plain 进行响应,但仍将我的类投影到 json 输出。我知道我添加的 CORS 类正在设置该 header ,但不知何故它被我的注释再次覆盖,即使我自己添加了另一个过滤器也是如此。

最佳答案

嗯,你指向的链接说它只适用于 REQUESTS。因此,您可以只接受纯文本,但可以自由生成您想要的任何内容。

编辑 尝试使用类似的代码注册自定义响应过滤器(也许您已经这样做了?):

@Provider
public class HeaderRewriteFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
response.setResponse(Response
.fromResponse(response.getResponse()).header(HttpHeaders.CONTENT_TYPE, "text/plain").build());
return response;
}
}

但是,如果响应已经包含此 header ,请检查结果以确保它是正确的。否则你可以尝试修改当前的响应,但我不确定你可以,因为它可能是一个不可变的对象。顺便说一下,它看起来不太干净 :)

List<Object> contentTypes = response.getHttpHeaders().get(HttpHeaders.CONTENT_TYPE);
contentTypes.clear();
contentTypes.add("text/plain");

另外,对于 json<>java 数据绑定(bind),您可以查看 Genson 库 http://code.google.com/p/genson/ ,它与 Jersey 集成得很好。只需将 jar 放在类路径中并运行即可!

编辑 2 好的,那么您必须以另一种方式进行操作,使用生成“text/plain”并为该类型定义一个 json bodywriter。缺点是您将只能生成 json。使用 Genson,您可以这样做:

@Provider
@Produces({ MediaType.TEXT_PLAIN })
public class PlainTextJsonConverter extends GensonJsonConverter {
public GensonJsonConverter() {
super();
}

public GensonJsonConverter(@javax.ws.rs.core.Context Providers providers) {
super(providers);
}
}

关于java - 注释资源以生成 JSON,但在响应 header 中返回 "text/plain",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13473000/

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