比如下面这个算是很常见的了
{
"code":200,
"msg":"success",
"data":[
{
"id":1,
"name":"jack"
},
{
"id":2,
"name":"rose"
}
]
}
按照resttemplate map response to pojo
关键字搜了半天居然没找到合适的方案
现在就想知道,针对这种返回体,使用 postEntity 或者 postObject 方法,resttemplate 有没有一些更优雅的处理方式?
1
chendy 2022-08-08 15:41:59 +08:00
个人经验
1. RestTemplate 拿 String 2. 自己做转换,这样如果遇到解析出错的情况,可以把原始 json 字符串打日志出来,方便排查 因为 RestTemplate 默认是用 Content-Type 判断如何反序列化,如果遇到(经常遇到) Content-Type 不好好给的接口,就要重新配置 MessageConverter ,就更麻烦 自己做转换可以自己封装 Response<T> -> UserResponse extends Response<User> 这样的类型,或者用 json 库相关的机制转换也可以 |
2
uSy62nMkdH OP |
3
LeegoYih 2022-08-08 15:50:28 +08:00 1
|
4
wolfie 2022-08-08 15:57:27 +08:00
org.springframework.web.client.RestTemplate#exchange
exchange 不是可以指定 ResponseEntity 泛型。 |
5
damai0419 2022-08-08 16:04:22 +08:00
直接 postEntity/Object 的没有,只有 exchange 的有,不过封装一层也不麻烦。
public <T> ResponseEntity<T> exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType, Object... uriVariables) ParameterizedTypeReference<T> responseType 这个字段是用来指定返回值的,支持了泛型嵌套能力。 |
7
lazyfighter 2022-08-08 16:41:24 +08:00
我都是自己封装 httpUtil
|
8
nekoneko 2022-08-08 17:08:38 +08:00
ParameterizedTypeReference<List<String>> ptr = new ParameterizedTypeReference<List<String>>() {};
ResponseEntity<List<String>> res = restTemplateBuilder.build() .exchange(uriTemplate, HttpMethod.GET, null, ptr); 这样可以 |
9
zhangxzh 2022-08-08 18:12:27 +08:00 via Android
这东西为什么单独拿出来用
|
10
RedBeanIce 2022-08-08 21:29:31 +08:00
@LeegoYih springboot 项目直接引入 openfeign 嘛,,,好像挺不错的诶。。
|
11
Leviathann 2022-08-08 21:37:14 +08:00
这破玩意的 api 突出一个乱七八糟
|
12
zhangxzh 2022-08-09 00:58:42 +08:00 via Android 1
@RedBeanIce 单独的 feign 应对简单客户端就足够了,openfeign 的间接依赖太重而且即使新版好像还挂着 cve 的牌子。同时欢迎换用 reative 和 WebClient
|
13
xiangyuecn 2022-08-09 01:26:02 +08:00
一律一把梭 益寿延年😂
|
14
Vaspike 2022-08-09 08:34:32 +08:00
一楼正解,用 String+Jackson 可保平安
|
15
fuxinya 2022-08-09 09:13:48 +08:00
springboot openfeign + 1
国内这些个厂商,提供的 API 经常不遵守标准,明明是个 json ,返回的 Content-Type 却是 text/plain 我甚至见过这样的:Content-Type:application/json:charset=UTF-8;charset=UTF-8 ,给他们提 bug 还说这关 Spring 框架什么事?没办法,自己搞个 Decoder 修改响应头适配呗。 |
16
kytrun 2022-08-09 10:00:19 +08:00
同 feign ,前几天刚写了一篇关于 [Spring Cloud Feign 去除全局包装、统一异常处理]( https://kytrun.com/spring-cloud-feign-unwrap-and-exception/) 的文章
|