dea*_*mon 51 java jax-rs character-encoding java-ee
如何使用JAX-RS设置charset?我已经尝试@Produces("text/html; charset=UTF-8")
但是被忽略了,只有text/html
HTTP头发送.我想在MessageBodyWriter中设置charset,但不希望通过我自己的反射分析@Produces注释来提取媒体类型.
Adr*_*scu 68
作为守护进程在评论中指出,JAX-RS的最新版本(包括稳定版为2012年9月),现在做支持的@Produces
语法.所以你可以使用:
@Produces("text/html; charset=UTF-8")
Run Code Online (Sandbox Code Playgroud)
小智 15
也可以使用ResponseBuilder.header(...)方法使用charset设置内容类型.请参阅下面的代码示例(使用JAX-RS 1.1.1,CXF 2.3.1).
final Response myResponse = Response.status(Response.Status.BAD_REQUEST)
.entity("La requête n'est pas correcte.\n ...")
.header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN+"; charset=ISO-8859-15" )
.build();
Run Code Online (Sandbox Code Playgroud)
stv*_*per 14
只是为了让它保持最新.不确定这是否在旧版本的Jersey中受支持,但是如果您决定使用ResponseBuilder.header(...)方法,则可以使用MediaType方法withCharset().像这样:
return Response.status(Status.OK)
.entity(result)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_TYPE.withCharset("utf-8"))
.build());
Run Code Online (Sandbox Code Playgroud)
Bry*_*Luk 10
如果要以JAX-RS实现中立方式执行此操作,则可以在MessageBodyWriter中重置Content-Type.就像是:
public void writeTo(Object obj,
Class<?> cls,
Type type,
Annotation[] annotations,
MediaType mt,
MultivaluedMap<String, Object> responseHttpHeaders,
OutputStream stream) throws IOException {
responseHttpHeaders.putSingle(javax.ws.rs.core.HttpHeaders.CONTENT_TYPE, mt.toString() + ";charset=UTF-8");
}
Run Code Online (Sandbox Code Playgroud)
如果除了每个资源方法的UTF-8之外还有不同的字符集,则可能需要创建自定义注释并将其添加到每个资源方法.然后,尝试在writeTo()方法中使用annotations参数.
仅供参考,Apache Wink支持在媒体类型上使用字符集和其他属性.我希望未来的JAX-RS规范版本能够让这更容易.