字符编码转换杰克逊和春季启动

时间:2018-05-29 15:59:41

标签: json spring-boot jackson apache-httpcomponents spring-cloud-feign

据我所知,从RFC中,JSON始终是UTF - *。

我有Spring REST服务,它从客户端接收JSON数据。但在我的系统中,下游的所有内容都是ISO-8859-1。包括在数据库中存储数据。

如何配置jackson以便创建时请求 - 响应在收到请求时始终从UTF-8更改为ISO-8859-1,在发送响应时始终从ISO-8859-1更改为UTF-8。

更新:

清楚了解我的问题。

  1. 读取ISO-8859-1中的文件。

  2. 提取数据并以UTF-8创建JSON对象(使用jackson)

  3. 接收UTF-8数据并存储在数据库中(可能是UTF-8)

  4. 将此UTF-8数据发送到ISO-8859-1中的另一个平面文件中

  5. 大多数数据,虽然它是UTF-8,但它只包含ISO-8859-1(1字节)的子集

    我的问题:我在服务器上使用Spring-boot-rest。

    Feign - 客户端上的apache http客户端。

    对于第2步,是否有更简洁的方法将ISO-8859-1数据转换为UTF-8,以便所有数据/任何api调用,数据被正确转换为UTF-8

    其次,对于创建文件时的第4步,如果存储在DB中的数据是UTF-8,如何确保在发送时正确转换数据。

1 个答案:

答案 0 :(得分:1)

似乎对角色编码的适用范围存在误解。在您描述的环境中,一方是REST到Java,另一方是Java到数据库(可能还有其他你称之为下游的东西)。

REST to Java :REST请求和响应通常采用UTF-8格式。在Java中,您只需拥有Java String 类的实例。它们隐藏了它们在内部使用的编码(从Java 10开始,它们甚至使用两种不同的编码。)但是从外部看,它们看起来像一串字符或Unicode代码点。 Jackson负责UTF-8和Java String 实例之间的转换。

Java to database :大多数数据库接口也将接受Java String 实例。在将数据传输到数据库时,它们将使用一些编码。但你不需要关心它。数据库负责处理它。

所以短篇小说是:问题不存在。不需要Jackson的字符编码配置。

如果将数据写入文本文件,则字符编码可能与您相关。但这与杰克逊无关。