springboot中,feign 调用时,参数对象中的Integer类型null,转为0的处理

在调用时,消费方传给feign为null,服务方收到的却是0,在消费方启动类加上以下代码,不行,服务方也加上

@Bean
	public HttpMessageConverters fastJsonHttpMessageConverters() {
		//创建FastJson信息转换对象
		FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
		//创建FastJson对象并设定序列化规则
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		fastJsonHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
		//规则赋予转换对象`
		fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
		return new HttpMessageConverters(fastJsonHttpMessageConverter, new StringHttpMessageConverter(Charset.forName("UTF-8")));
	}

### Feign 参数传递详解 Feign 是 Spring Cloud 中用于声明式 RESTful 客户端的一个工具,它使得编写 HTTP 请求变得更加简单。以下是关于 Feign 如何正确进行参数传递的具体说明。 #### 一、无参数的情况 当不需要向目标服务传递任何参数,可以直接定义接口而无需额外处理。 ```java @FeignClient(name = "example-service") public interface ExampleService { @GetMapping("/api/example") String getExample(); } ``` 此场景适用于简单的 GET 请求[^1]。 --- #### 二、单参数的情况 对于只有一个参数的需求,可以通过 `@RequestParam` 或者路径变量的方式实现。 ##### 1. 使用 `@RequestParam` 的 GET 请求 如果需要通过 URL 查询字符串传递参数,则可以使用 `@RequestParam` 注解。 ```java @FeignClient(name = "example-service") public interface ExampleService { @GetMapping("/api/example/{id}") String getExampleById(@RequestParam("id") Long id); } ``` ##### 2. POST 请求的单参数传递 如果是 POST 请求,通常会将数据放在请求体中。 ```java @FeignClient(name = "example-service") public interface ExampleService { @PostMapping("/api/example") String createExample(@RequestBody ExampleRequest request); } ``` 注意:这里的 `@RequestBody` 表示整个对象会被序列化并放入请求体中。 --- #### 三、多参数的情况 当有多个参数需要传递,可以根据实际需求选择不同的方式。 ##### 1. 多参数的 GET 请求 在 GET 请求中,推荐使用 `@RequestParam` 来指定每个参数。 ```java @FeignClient(name = "example-service") public interface ExampleService { @GetMapping("/api/examples") List<Example> findExamples( @RequestParam(value = "name", required = false) String name, @RequestParam(value = "status", required = true) Integer status); } ``` 这里需要注意的是,某些情况下允许部分参数为空(即设置 `required=false`),这取决于业务逻辑的要求[^4]。 ##### 2. 多参数的 POST 请求 对于复杂的表单提交或多字段传输,建议封装成一个实体类作为入参。 ```java @Data @AllArgsConstructor @NoArgsConstructor class MultiParamRequest { private String fieldA; private int fieldB; } @FeignClient(name = "example-service") public interface ExampleService { @PostMapping("/api/multi-param-example") ResponseEntity<String> submitMultiParams(@RequestBody MultiParamRequest request); } ``` 这种方式不仅提高了代码可读性,还便于维护和扩展。 --- #### 四、特殊场景——Header 参数传递 有还需要携带一些上下文信息(比如 token 或间戳)随同请求一起发送给服务器。此可通过自定义配置来完成 Header 参数的注入。 创建一个全局适用的 Feign 配置文件: ```java @Configuration public class FeignConfiguration { @Bean public RequestInterceptor headerInterceptor() { return template -> { template.header("Authorization", "Bearer YOUR_TOKEN"); template.header("Timestamp", System.currentTimeMillis()); }; } } ``` 接着将其绑定至特定的服务客户端上即可生效。 ```java @FeignClient(name = "header-service", configuration = FeignConfiguration.class) public interface HeaderService { @GetMapping("/api/secure-endpoint") String secureEndpoint(); } ``` 上述例子展示了如何动态添加 Headers 到每次请求之中[^3]。 --- #### 五、注意事项 - 如果某个参数可能为 null ,则需特别留意其行为是否会引发异常。一般而言,Spring Cloud 默认不允许 NULL 值参与调用;不过也可以调整策略使其支持这种情形[^2]。 - 对于复杂的数据结构(如嵌套 JSON 数组等),务必确认双方约定一致,并验证最终生成的有效负载是否符合预期。 --- ### 总结 综上所述,利用 Feign 进行跨服务通信,合理选用合适的方法能够有效提升开发效率以及程序稳定性。无论是基础类型的单一值还是更高级别的组合型输入都可以轻松应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值