JAVA开发日常(记录问题1)

问题描述

1、需要请求二方feginClient接口查询相关业务信息(请求方式 POST)

@PostMapping(path = "/v1/xxx")
DataResponse<XXXResponseDTO> batchGetxxx(@RequestBody XXXRequestDTO dto);

2、奇葩要求:入参的所有字段即使为null也需要传递,举个例子:

XXXRequestDTO 有两个字段:

{

        "productNo":"xxx", // 字符串类型

        "bizType":xxx // Interger类型

}

当bizType为null时,需要入参如下:

{

        "productNo":"xxx",

        "bizType":null

}

如果入参如下,则会参数检测不通过

{

        "productNo":"xxx"

}

解决方式

feginClient接口定义

// 注意请求头是必须的
@PostMapping(path = "/v1/xxx" headers = {"Content-Type=application/json"})
DataResponse<XXXResponseDTO> batchGetxxx(String json);

调用时

// 使用jackson序列化,自主选择如何系列化方式
ObjectMapper objectMapper = new ObjectMapper();

String jsonReq = objectMapper.writeValueAsString(dto);

// 发起调用
xxxClient.batchGetxxx(jsonReq);

问题说明

1、因为springBoot默认采用了jackson序列化对象,通常项目会默认统一配置序列化方式,对于 @RequestBody 标记的对象如若属性值为null,通常不会序列化(序列化其实也很奇怪)

2、因此如若需要实现特殊接口特殊处理,上诉方式是比较自由的

3、当然,我也研究了诸如自定义Feign的Encoder和Decoder、配置@FeignClient的configuration = ObjectMapperConfig.class等方式,但是没有预期效果,又不想再深入研究(不想占用太多时间),因此选择了该方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海牛根

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值