1. 程式人生 > >spring boot 請求引數增加string 轉date全域性轉換器

spring boot 請求引數增加string 轉date全域性轉換器

使用springboot框架對日期型別進行操作,遇到無法保持的情況,一開始報400的錯誤(解決方法),解決之後日期型別無法儲存到資料庫,為了解決這個問題,設定了個全域性date轉換器。

配置方法

1、新增一個轉換類

新增一個string轉換成date的類,實現Converter介面,程式碼如下:

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;
import org.springframework.util.StringUtils;

public
class StringToDateConverter implements Converter<String, Date> { private static final String dateFormat = "yyyy-MM-dd HH:mm:ss"; private static final String shortDateFormat = "yyyy-MM-dd"; @Override public Date convert(String value) { if(StringUtils.isEmpty(value)) { return
null; } value = value.trim(); try { if(value.contains("-")) { SimpleDateFormat formatter; if(value.contains(":")) { formatter = new SimpleDateFormat(dateFormat); }else { formatter = new
SimpleDateFormat(shortDateFormat); } Date dtDate = formatter.parse(value); return dtDate; }else if(value.matches("^\\d+$")) { Long lDate = new Long(value); return new Date(lDate); } } catch (Exception e) { throw new RuntimeException(String.format("parser %s to Date fail", value)); } throw new RuntimeException(String.format("parser %s to Date fail", value)); } }

2、註冊轉換器

新增一個類,配置為Configuration,把第一步新增的類註冊為轉換器,程式碼如下:

import javax.annotation.PostConstruct;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;

@Configuration
public class WebConfigBeans {

    @Autowired
    private RequestMappingHandlerAdapter handlerAdapter;

    /**
     * 增加字串轉日期的功能
     */

    @PostConstruct
    public void initEditableAvlidation() {

        ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer)handlerAdapter.getWebBindingInitializer();
        if(initializer.getConversionService()!=null) {
            GenericConversionService genericConversionService = (GenericConversionService)initializer.getConversionService();           

            genericConversionService.addConverter(new StringToDateConverter());

        }

    }

}

經過以上步驟全域性轉換器即搞定,對於操作日期時間型別的操作,與原來的springMVC沒有改變。