接口响应防止出现null返回

本文介绍在Spring框架中如何处理API返回数据,确保空值以特定类型返回,避免使用null值,通过配置FastJsonHttpMessageConverter实现正确的数据格式化。

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

从后台的角度来说,api中返回的数据中,正确值和空值的类型必须一样,举例,用户名的字段是“realname”: “xxx”,如果用户名为空,则应该返回“realname”:”“。如果返回值是一个array,空数据则返回一个空array,如果返回值是一个对象,空数据则返回一个空对象,绝对禁止null值。那么我们应该怎么处理这个问题呢?实际上在spring框架中可以这样:

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
      <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
        <property name="supportedMediaTypes">
          <list>
            <value>text/html;charset=UTF-8</value>
            <value>application/json</value>
            <value>application/x-www-form-urlencoded</value>
            <value>text/plain</value>
          </list>
        </property>
        <property name="features">
          <list>
            <!-- 输出key时是否使用双引号 -->
			<value>QuoteFieldNames</value>
  			<!-- 是否输出值为null的字段 -->
  			<value>WriteMapNullValue</value>
  			<!-- 数值字段如果为null,输出为0,而非null -->
  			<value>WriteNullNumberAsZero</value>
  			<!-- List字段如果为null,输出为[],而非null -->
  			<value>WriteNullListAsEmpty</value>
  			<!-- 字符类型字段如果为null,输出为"",而非null -->
  			<value>WriteNullStringAsEmpty</value>
  			<!-- Boolean字段如果为null,输出为false,而非null -->
  			<value>WriteNullBooleanAsFalse</value>
  			<!-- Date的日期转换器 -->
  			<value>WriteDateUseDateFormat</value>
          </list>
      </property>
      <property name="dateFormat" value="yyyy-MM-dd HH:mm:ss"/>
      </bean>
    </mvc:message-converters>
  </mvc:annotation-driven>

 

### PageHelper 分页插件返回 `null` 的原因分析 当使用 PageHelper 进行分页操作时,如果遇到返回 `null` 的情况,通常是因为查询结果为或配置不当所致。具体来说: - 如果查询条件过于严格,导致没有任何记录满足条件,则返回的结果集将是列表而不是 `null`[^1]。 - 若在执行分页前未正确调用 `PageHelper.startPage()` 方法设置分页参数,可能会引发异常或返回意外的结果。 ### 解决方案 为了确保即使没有匹配的数据也能得到一个集合而非 `null`,可以采取如下措施: #### 1. 修改 DAO 层代码逻辑 确保每次查询都返回 `List<?>` 类型的对象,即便数据库中无符合条件的数据项。这可以通过调整 Mapper 接口中的 SQL 映射文件来实现,保证其总是返回至少是一个数组的形式。 ```xml <select id="findAll" resultType="Product"> SELECT * FROM products WHERE 1=1 <!-- 条件 --> </select> ``` #### 2. 使用默认值填充机制 可以在 Service 或 Controller 中捕获到潜在的 `null` 值并将其替换为新的列表实例,从而避免上层应用收到 `null` 反馈。 ```java public PageInfo<Product> findProductsByPage(int pageNum, int pageSize){ PageHelper.startPage(pageNum, pageSize); List<Product> list = productDao.findAll(); // 防止list为null的情况发生 if (list == null) { list = new ArrayList<>(); } return new PageInfo<>(list); } ``` #### 3. 调整 PageHelper 插件行为 部分情况下也可以考虑修改 PageHelper 自身的行为模式,比如通过自定义拦截器或其他手段改变其对于零条目场景下的响应策略。不过这种方式相对复杂一些,建议优先尝试上述两种简单有效的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值