Json作为请求头传输的一个坑

302 阅读1分钟

前言

首先讲一下我碰到这个问题的情况,在我把一个java对象转成json字符串后放在请求头中准备调用另一个服务的接口,这时候我的程序发生了一个非常奇怪的问题,在我对象转成json字符串是没有问题的,但是到了另一个接口后这个json字符串发生了内容缺失,这种情况其实是json字符串编码的问题。

一、json出现的问题

存header

User user = UserInfoContext.getUser();
requestTemplate.header("USER_INFO", JSON.toJSONString(user));

取header

String user = request.getHeader("USER_INFO");
User user1 = JSON.parseObject(userJson, User.class);

咋一看这段代码是没有问题的,但是我在取header时它的内容就发生了缺失

这是原来的json字符串{id:"16", "image":null, "name":"fj"}

变成了{id:"16", "image"

二、解决方法

存header时

String json = JSON.toJSONString(user);
byte[] jsonBytes = json.getBytes(StandardCharsets.UTF_8);
String jsonBase64 = Base64.getEncoder().encodeToString(jsonBytes);
requestTemplate.header("USER_INFO", jsonBase64);

取header时

String user = request.getHeader("USER_INFO");
byte[] userBytes = Base64.getDecoder().decode(user);
String userJson = new String(userBytes, StandardCharsets.UTF_8);
User user1 = JSON.parseObject(userJson, UserInfo.class);

大家以后在使用json时记得注意json字符串编码的问题。