SpringMVC统一转换null值为空字符串的方法,处理date类型参数

7 篇文章 0 订阅

1、在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>  


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

 

转换前:

转换后:

2、对于date类型参数的处理

一般的项目都有一个baseController,其他的controller来继承这个baseController,示例如下:

/**
 * 控制器父类
 */
public class BaseController {
   
    /**
    * 日志
    */
   protected Logger logger = LoggerFactory.getLogger(getClass());
   
   @InitBinder
   public void initBinder(WebDataBinder binder, HttpServletRequest request) {
      binder.registerCustomEditor(Date.class, new DateEditor());
   }
   
}

class DateEditor extends PropertyEditorSupport {
   @Override
   public void setAsText(String text) throws IllegalArgumentException {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date date = null;
      if(StringUtils.isEmpty(text)){
         setValue(date);
      }else {
         try {
            date = format.parse(text);
         } catch (ParseException e) {
            format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            try {
               date = format.parse(text);
            } catch (ParseException e1) {
               format = new SimpleDateFormat("yyyy-MM-dd");
               try {
                  date = format.parse(text);
               } catch (ParseException e2) {
                  format = new SimpleDateFormat("yyyy");
                  try {
                     date = format.parse(text);
                  } catch (ParseException e3) {
                     e3.printStackTrace();
                  }
               }
            }
         }
         setValue(date);
      }
   }
}

在这个baseController里面可以定一些统一成功或者失败的结果方法, @InitBinder注解在方法上,绑定一个日期类型的转换类DateEditor,类名自定义,继承PropertyEditorSupport,这里面可以自由定义你要转换的各种日期类型。

然后在具体传参的实体类上加上注解@DateTimeFormat就行了

对于springboot项目的处理见我另一篇文章:https://blog.csdn.net/li_jiazhi/article/details/89670861

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值