SpringMVC统一转换null值为空字符串的方法

本文介绍如何在SpringMVC框架中通过配置将数据库查询返回的null值转换为空字符串,提升前端展示效果。主要步骤包括自定义ObjectMapper类及在配置文件中注入。

Java Web中,如果数据库中的值为null,而不做任何转换的话,传到前端页面会显示为null,影响美观。比如,智联招聘网站上的这个样子:


在SpringMVC中,可以通过在<mvc:annotation-driven>中配置<mvc:message-converters>,把null值统一转换为空字符串,解决这个问题。下面以JSon交互的方式为例说明如何实现:


第一步:创建一个ObjectMapper

[java]  view plain  copy
  1. package com.xjj.anes.mvc.converter;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import com.fasterxml.jackson.core.JsonGenerator;  
  6. import com.fasterxml.jackson.core.JsonProcessingException;  
  7. import com.fasterxml.jackson.databind.JsonSerializer;  
  8. import com.fasterxml.jackson.databind.ObjectMapper;  
  9. import com.fasterxml.jackson.databind.SerializerProvider;  
  10.   
  11. /** 
  12.  * @description: 转换null对象为空字符串 
  13.  */  
  14. public class JsonObjectMapper extends ObjectMapper {  
  15.     private static final long serialVersionUID = 1L;  
  16.   
  17.     public JsonObjectMapper() {  
  18.         super();  
  19.         // 空值处理为空串  
  20.         this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {  
  21.             @Override  
  22.             public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {  
  23.                 jg.writeString("");  
  24.             }  
  25.         });  
  26.     }  
  27. }  

第二步: 在SpringMVC配置文件中,把新建的ObjectMapper注入给MappingJackson2HttpMessageConverter

[html]  view plain  copy
  1. <!-- 注册RequestMappingHandlerMapping 和RequestMappingHandlerAdapter 两个bean。-->  
  2. <mvc:annotation-driven>  
  3.     <mvc:message-converters>  
  4.         <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
  5.             <property name="objectMapper">  
  6.                 <bean class="com.xjj.anes.mvc.converter.JsonObjectMapper"></bean>  
  7.             </property>  
  8.         </bean>  
  9.     </mvc:message-converters>  
  10. </mvc:annotation-driven>  

重新启动服务器后,即可看到效果。

转换前:


转换后:

字符串转换成`LocalDate`有多种方法,以下为你详细介绍: ### 使用`DateTimeFormatter`手动转换 可以使用`DateTimeFormatter`指定日期格式,然后使用`LocalDate.parse`方法字符串解析为`LocalDate`对象。示例代码如下: ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; public class Example { public static void main(String[] args) { String dateString = "2022-01-01"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); try { LocalDate date = LocalDate.parse(dateString, formatter); System.out.println(date); } catch (DateTimeParseException e) { System.out.println("无效的日期格式"); e.printStackTrace(); } } } ``` 此方法适用于手动处理字符串转换为`LocalDate`的场景,需要手动指定日期格式并处理可能的解析异常[^2]。 ### SpringMVC 请求体字符串转换SpringMVC中,若要将请求体中的字符串转换为`LocalDate`,可在对应的字段上添加注解。示例代码如下: ```java import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import java.time.LocalDate; public class YourClass { // 反序列化 @JsonDeserialize(using = LocalDateDeserializer.class) // 序列化 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") private LocalDate end; } ``` 这种方式适用于SpringMVC项目,可自动处理请求体中字符串到`LocalDate`的转换[^3]。 ### 自定义转换类处理Excel数据 在读取Excel表数据时,若要将字符串转换为`LocalDate`,可在实体类中添加相应注解并指定自定义的转换类。示例代码如下: ```java import com.alibaba.excel.annotation.ExcelProperty; public class YourEntity { @ExcelProperty(value = "费用发生时间", index = 3, converter = CustomDateConverter.class) private LocalDate expenseDate; } ``` 此方法适用于处理Excel数据时将字符串转换为`LocalDate`,需要自定义转换类`CustomDateConverter`来实现具体的转换逻辑[^4]。 ### 处理字符串转换 在遍历列表时,可添加`if`语句检查字符串是否为或是否可解析。示例代码如下: ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.List; public class EmptyStringToLocalDate { public static void main(String[] args) { List<String> dateStrings = new ArrayList<>(); dateStrings.add("2022-01-01"); dateStrings.add(""); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); for (String dateString : dateStrings) { LocalDate date = null; if (dateString != null && !dateString.isEmpty()) { try { date = LocalDate.parse(dateString, formatter); } catch (DateTimeParseException e) { // 处理解析异常 } } System.out.println(date); } } } ``` 该方法用于处理可能包含字符串的列表,在转换时进行检查和异常处理[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值