java-如何使用JAX-RS设置字符集?

如何使用JAX-RS设置字符集? 我尝试了2719601197371098198112,但是这被忽略了,只有text/html与HTTP标头一起发送。 我想在MessageBodyWriter中设置字符集,但是不想自己通过反射来分析@Produces注释来提取媒体类型。

7个解决方案

67 votes

正如Daemon在评论中指出的那样,JAX-RS的最新版本(包括截至2012年9月的稳定版本)现在确实支持@Produces808语法。 因此,您可以使用:

@Produces("text/html; charset=UTF-8")

Adrian Petrescu answered 2020-01-26T11:36:27Z

15 votes

也可以使用ResponseBuilder.header(...)方法通过字符集设置内容类型。 参见下面的代码示例(使用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();

SMougenot answered 2020-01-26T11:36:48Z

14 votes

只是为了使其保持最新状态。 不确定是否在较旧版本的Jersey中是否支持此功能,但是可以肯定的是,如果您决定使用ResponseBuilder.header(...)方法,则可以将MediaType方法与Charset()一起使用。 像这样:

return Response.status(Status.OK)

.entity(result)

.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_TYPE.withCharset("utf-8"))

.build());

stviper answered 2020-01-26T11:37:08Z

10 votes

如果要以不依赖JAX-RS实现的方式执行此操作,则可以在MessageBodyWriter中重置Content-Type。 就像是:

public void writeTo(Object obj,

Class> cls,

Type type,

Annotation[] annotations,

MediaType mt,

MultivaluedMap responseHttpHeaders,

OutputStream stream) throws IOException {

responseHttpHeaders.putSingle(javax.ws.rs.core.HttpHeaders.CONTENT_TYPE, mt.toString() + ";charset=UTF-8");

}

如果每个资源方法除了UTF-8之外还有其他字符集,则可能需要创建一个自定义注释并将其添加到每个资源方法中。 然后,尝试在writeTo()方法中使用批注参数。

仅供参考,Apache Wink支持在媒体类型上使用字符集和其他属性。 我希望将来的JAX-RS规范修订版可以使此操作变得容易。

Bryant Luk answered 2020-01-26T11:37:37Z

1 votes

在资源类方法上首先设置response批注。

然后在您返回的类型response中,可以在writer方法中执行以下操作:

response.setContentType(mediaType.toString);

备注:您可以通过以下方式在writer中注入response:

@Context

protected HttpServletResponse response;

To Kra answered 2020-01-26T11:38:06Z

1 votes

我要做的是获取servlet响应对象的实例:

protected @Context HttpServletResponse response;

然后将字符编码设置为utf-8:

response.setCharacterEncoding("utf-8");

这对我行得通。

Giannis answered 2020-01-26T11:38:34Z

1 votes

如果使用RESTEasy,则可以注册拦截器:

import org.jboss.resteasy.annotations.interception.ServerInterceptor;

import org.jboss.resteasy.core.ResourceMethodInvoker;

import org.jboss.resteasy.core.ServerResponse;

import org.jboss.resteasy.spi.Failure;

import org.jboss.resteasy.spi.HttpRequest;

import org.jboss.resteasy.spi.interception.PreProcessInterceptor;

import org.jboss.resteasy.plugins.providers.multipart.InputPart;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import javax.ws.rs.WebApplicationException;

import javax.ws.rs.ext.Provider;

@Provider

@ServerInterceptor

public class ContentTypeSetter implements PreProcessInterceptor {

@Override

public ServerResponse preProcess(HttpRequest request, ResourceMethodInvoker resourceMethodInvoker) throws Failure, WebApplicationException {

request.setAttribute(InputPart.DEFAULT_CONTENT_TYPE_PROPERTY, "*/*; charset=UTF-8");

return null;

}

}

注意:如果您手动设置@Produces,它将覆盖此拦截器设置的ContentType。 如果这样做,请在@Produces中设置字符集

lujop answered 2020-01-26T11:38:59Z

java中rs怎么用_java-如何使用JAX-RS设置字符集?相关推荐

  1. java中飞飞检查异常_Java复习6异常处理

    Java复习6.异常处理 20131005 前言: Java中的异常处理机制是非常强大的,相比C++ 来说,更加系统.但是我们开发人员没有很好的使用这一点.一些小的程序是没有什么问题的,但是对于大型项 ...

  2. java中po代码示例_java操作oracle常用的示例代码详解

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  3. java中取系统时间_JAVA中获取当前系统时间(示例代码)

    一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowStrin ...

  4. 在java中获取当前时间_JAVA中获取当前系统时间

    一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleDateFormat; public class NowStri ...

  5. java中result的作用_JAVA中的Resultset

    JAVA中的Resultset (2012-04-21 14:53:34) 标签: it JAVA中Resultset是一个类 . 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结 ...

  6. java中什么是空指针异常_java中空指针异常的问题,是怎么回事?请看代码

    问题补充: 加载错误! 失败 JAVA.SQL.SQLEXCEPTION: NO SUITABLE DRIVER FOUND FOR JDBC:SQLSERVER://LOCALHOST:1433;D ...

  7. java中注解的使用_java中注解的使用

    使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节.注解就是用于修饰类.全局变量.方法.参数或局部变量的接口,java中规定,注解的使用 ...

  8. java中组件与容器_java中的容器组件和非容器组件

    1.java使用到的图形类主要在java.awt 与javax.swing包中. 2.java.awt 与 javax.swing包的区别: ① java.awt中使用的图形类都是依赖于系统的图形库的 ...

  9. java中事件监听_Java中的事件监听机制

    鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...

  10. java中是否支持多重继承_java支持多重继承吗 JAVA特性面试题:

    1.简要介绍java程序的健壮性. 答:JAVA程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格,而且它的垃圾回收机制也有效的避免了内存的泄漏. 2.为什 ...

最新文章

  1. 翻看雷军近10年演讲、采访,我们整理出70条干货
  2. php模拟socket一次连接,多次发送数据的实现
  3. jQuery修改页面元素的属性
  4. Squash my last X commits together using Git | Git 如何合并历史提交记录?
  5. SAP Commerce Cloud Spartacus UI footer 区域的设计模型
  6. React开发(141):react中ref为class添加ref
  7. 微信java创建菜单_微信自定义菜单的创建(JAVA版)
  8. 利用Samba搭建Backup Server配置文件
  9. 关于实时协同编辑的架构思考
  10. 程序员如何保护自己的头发
  11. bootloader recovery
  12. BREDR之inquiry及page
  13. causalml安装记录
  14. 产品经理十七章:结构化发散思维
  15. mysql 执行delete引发死锁问题
  16. 移动端地图开发技术分享交流会PPT
  17. 手机设备唤醒计算机,手机遥控电脑开机神器!局域网唤醒App
  18. 南京金融python培训班
  19. 通过伴随矩阵怎么求逆矩阵
  20. MeeGo操作系统 华硕Eee PC X101在美上架

热门文章

  1. 为什么 Python 没有 main 函数?
  2. 机器学习160个常见问题.pdf
  3. 5 门前途美好的编程语言
  4. 骚操作 !用 Python 偷偷抓取女朋友的行踪(女朋友在哪里)
  5. 聚类分析案例:探究用户对物品类别的喜好细分降维
  6. RGBD相机模型与图片处理
  7. 全面解读PyTorch内部机制
  8. 第一篇:BPE算法(附加)
  9. SQL Server中的命名规范(个人使用)
  10. 由于市场判断失误 希捷降低收入预期