날짜 또는 숫자의 컴마 공통처리

 

1. 커스텀 클래스 생성

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

import javax.servlet.Servlet;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.solution.framework.convert.ConvertDate;
import com.solution.framework.convert.ConvertNumber;

/**
 *
 * @author ljo
 *
 */
@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class WebBindingInitializer extends ConfigurableWebBindingInitializer {

	@Override
    public void initBinder(WebDataBinder binder, WebRequest request) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));

        // Trim 처리
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));

        Iterator fields = request.getParameterNames();
        if (fields != null && fields.hasNext()) {
        	while (fields.hasNext()) {
                String field = fields.next();

                // 일자(DT) 도메인일 경우 "YYYY-MM-DD" 값에서 "-" 를 제거함
                if (StringUtils.endsWith(field, "Dt")) {
                    binder.registerCustomEditor(String.class, field, new ConvertDate());
                }

                // 수(CNT), 시간(TM), 금액(AMT), 합계(SUM) 도메인일 경우 숫자 이외 문자 제거
                else if (StringUtils.endsWith(field, "Cnt")
                        || StringUtils.endsWith(field, "Tm")
                        || StringUtils.endsWith(field, "Amt")
                        || StringUtils.endsWith(field, "Price")
                        || StringUtils.endsWith(field, "Cash")
                        || StringUtils.endsWith(field, "Sum")) {
                    binder.registerCustomEditor(String.class, field, new ConvertNumber());
                }
            }
        }
    }
}

2. 컨버트 클래스 샘플

import java.beans.PropertyEditorSupport;
import org.apache.commons.lang3.StringUtils;

public class ConvertNumber extends PropertyEditorSupport {
	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		if (StringUtils.isEmpty(text)) {
			setValue(null);
			return;
		}
		setValue(text.replaceAll("\\D", ""));
	}
}

'개발 > java&kotlin' 카테고리의 다른 글

Spring boot - logback 로그처리  (0) 2020.03.27
java 로 캡챠 구현  (0) 2020.03.26
spring 크로스 도메인 처리  (0) 2018.07.12
POI 엑셀 다운로드  (0) 2018.07.11
spring boot 스케줄러 설정  (0) 2018.07.11