接口请求参数去空

这篇博客介绍了如何在Utils模块中定义一个函数`cleanObject`用于清除对象中的空值,然后结合`qs`库将处理后的参数转换为查询字符串,用于API请求。在React的useEffect钩子中,展示了如何利用这些工具函数来实现动态更新参数并发送GET请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在utils的index.js中写入:
export const isFalsy = (value) => value === 0 ? false : !value

export const cleanObject = (object: any) => {
const result = { …object }
Object.keys(result).forEach(key => {
const value = result[key]
if(isFalsy(value)) {
delete result[key]
}
})
return result
}

2.引入qs(npm 仓库所管理的包)
yarn add qs

3.使用
import { cleanObject } from ‘…/…/utils’
import * as qs from ‘qs’

const [param, setParam] = useState({
name: ‘’,
personId: ‘’
})
useEffect(() => {
console.log(‘apiUrl:’, apiUrl)
fetch(${apiUrl}/projects?${qs.stringify(cleanObject(param))}).then(async res => {
if (res.ok) setList(await res.json())
})
}, [param])

### 如何在Swagger中定义和访问接口请求参数 #### 使用`@ApiParam`注解来描述方法参数 为了使Swagger能够识别并展示接口中的请求参数,在Spring Boot项目里可以利用`io.swagger.annotations.ApiParam`注解给控制器的方法形参添加说明。这仅有助于自动生成API文档,也方便开发者了解各个参数的作用。 ```java import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @Api(tags = {"用户管理"}) @RestController public class UserController { @ApiOperation(value = "获取指定ID的用户详情", notes = "") @GetMapping("/users/{id}") public ResponseEntity<User> getUserById( @ApiParam(name = "id", value = "用户的唯一标识符", required = true, example = "10086") @PathVariable Long id) { // 处理逻辑... return new ResponseEntity<>(new User(), HttpStatus.OK); } } ``` 上述代码片段展示了如何通过路径变量的形式接收一个名为`id`的长整型数值作为输入,并将其标记为必填项以及提供默认示例值[^2]。 #### 利用`@RequestBody`处理复杂数据结构 当涉及到更复杂的JSON对象时,则可以通过实体类配合`javax.validation.Valid`验证约束条件的方式来进行校验;同时借助于`org.springframework.web.bind.annotation.RequestBody`注解告知框架该参数应从HTTP请求体读取而来。 ```java import com.fasterxml.jackson.databind.ObjectMapper; import javax.validation.constraints.NotBlank; import javax.validation.Valid; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; // 实体类User.java class User { private Long id; @NotBlank(message = "用户名能为") private String name; // getter setter 省略... } @Api(tags = {"用户操作"}) @RestController @RequestMapping("/api/v1/users") public class UserControllerV2 { ObjectMapper objectMapper = new ObjectMapper(); @PostMapping("") @ApiOperation(value = "创建新用户", response = User.class) public ResponseEntity<String> createUser(@Valid @RequestBody User user){ try{ System.out.println(objectMapper.writeValueAsString(user)); return ResponseEntity.status(HttpStatus.CREATED).body("success"); }catch (Exception e){ throw new RuntimeException(e.getMessage()); } } } ``` 这里定义了一个POST类型的端点用于接受客户端提交的新用户记录。注意这里的`@Valid`关键字会触发JSR-303 Bean Validation机制自动检验入的数据合法性。 #### 解决请求参数未正常显示的问题 如果遇到像引用提到的情况——即使用对象参数却无法看到具体的属性列表,那么可能是因为缺少必要的配置或是版本兼容性问题所致。确保所使用的依赖库是最新的稳定版,并且按照官方指南正确设置了扫描包范围等选项[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值