You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringMVC接口可选参数赋值无需IF语句的空值检查实现方法

无需显式IF语句实现可选参数空值检查的几种可行方案

方案1:Spring MVC请求参数直接绑定POJO(最推荐,原生支持)

Spring MVC本身支持将接口的请求参数自动映射到实体类属性,不需要逐个声明@RequestParam接收后再手动赋值,空值参数不会触发对应属性的set方法,完全避免手动判空。
你可以直接改造接口方法如下:

@GetMapping(path = "/search", produces = {MediaType.APPLICATION_JSON_VALUE , MediaType.APPLICATION_XML_VALUE})
public ResponseEntity<String> getCategoriesByExample(Category category){
    // 直接获取已完成赋值的category对象,未传的参数属性保持默认值
}

如果id字段需要转UUID,可以直接将Category类的id属性定义为UUID类型,Spring会自动完成类型转换,转换失败会抛出参数非法异常,无需手动调用UUID.fromString。如果有特殊转换需求,也可以全局注册Converter<String, UUID>实现类自定义转换逻辑。

注意:如果Category存在不允许前端传参覆盖的业务字段,可以通过@InitBinder配置忽略对应字段,避免安全问题。

方案2:封装通用工具类,利用函数式接口实现空值跳过

如果你必须逐个接收@RequestParam参数,可以自己封装静态工具方法隐藏判空逻辑:
首先定义通用工具方法:

public class ParamAssignUtils {
    // 非空时直接赋值
    public static <T> void setIfNotNull(Consumer<T> setter, T value) {
        if (value != null) {
            setter.accept(value);
        }
    }
    // 非空时先转换再赋值
    public static <T, R> void convertAndSetIfNotNull(Function<T, R> converter, T value, Consumer<R> setter) {
        if (value != null) {
            setter.accept(converter.apply(value));
        }
    }
}

使用时完全不需要写IF语句:

Category cat = new Category();
ParamAssignUtils.convertAndSetIfNotNull(UUID::fromString, id, cat::setId);
ParamAssignUtils.setIfNotNull(cat::setName, name);
// 其余参数以此类推

方案3:使用Optional类实现无IF判空

Java 8+自带的Optional类也可以实现无显式IF的空值判断赋值:

Category cat = new Category();
Optional.ofNullable(id).map(UUID::fromString).ifPresent(cat::setId);
Optional.ofNullable(name).ifPresent(cat::setName);
// 其余参数以此类推

该写法逻辑清晰,不需要额外引入工具类。

方案4:第三方Bean属性复制工具类

如果参数数量非常多,可以将所有参数先存入Map,再用属性复制工具类自动忽略空值赋值,比如HuTool的BeanUtil默认支持忽略null值:

Map<String, Object> paramMap = new HashMap<>();
paramMap.put("id", id == null ? null : UUID.fromString(id));
paramMap.put("name", name);
// 其余参数塞入map
Category cat = new Category();
BeanUtil.copyProperties(paramMap, cat, CopyOptions.create().ignoreNullValue());

内容的提问来源于stack exchange,提问作者leorosignoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:24:02