복붙노트

[SPRING] 봄 mvc에서 LocalDate에 대한 전역 데이터 바인딩을 등록하는 방법?

SPRING

봄 mvc에서 LocalDate에 대한 전역 데이터 바인딩을 등록하는 방법?

Spring-mvc로 만든 Servlet에서 LocalDate를 유형으로 사용하고 싶습니다. 사용자는 yyyyMMdd, yyyy-MM-dd, yyMMdd, yy-MM-dd 등 여러 유효한 형식으로 날짜를 제공 할 수 있어야합니다.

따라서 해당 클래스에 대한 자체 변환기를 등록하고 전체 응용 프로그램에 대해 전역으로 등록하려고합니다. 그러나 그것은 결코 픽업되지 않는다.

문제 : 내 사용자 정의 편집기가 호출되지 않습니다.

@Bean
public CustomEditorConfigurer init() {
    CustomEditorConfigurer c = new CustomEditorConfigurer();
    c.setPropertyEditorRegistrars(new PropertyEditorRegistrar[] {
            (registry) -> registry.registerCustomEditor(LocalDate.class, new LocalDatePropertyEditor())
    });
    return c;
}

public class LocalDatePropertyEditor extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) {
        this.setValue(LocalDate.parse(text, DateTimeFormatter.ISO_DATE));
    }

    @Override
    public String getAsText() {
        return this.getValue().toString();
    }
}


@RestController
public void DateServlet {
    @RequestMapping("/test")
    public void test(@RequestParam LocalDate date) {

    }
}

전화 할 때 : localhost : 8080 / test? date = 2017-07-05

디버깅하는 동안 LocalDate PropertyEditor 클래스가 호출되지 않는다는 것을 알 수 있습니다. 그런데 왜?

해결법

  1. ==============================

    1.나는 아직도 PropertyEditor가 작동하지 않는 이유를 모른다. 하지만 다음과 같은 솔루션이 효과적이었습니다.

    나는 아직도 PropertyEditor가 작동하지 않는 이유를 모른다. 하지만 다음과 같은 솔루션이 효과적이었습니다.

    @Configuration
    public class LocalDateConfig extends WebMvcConfigurerAdapter {
        @Override
        public void addFormatters(FormatterRegistry registry) {
            super.addFormatters(registry);
            registry.addFormatterForFieldType(LocalDate.class, new Formatter<LocalDate>() {
                //override parse() and print()
            });
        }
     }
    
  2. from https://stackoverflow.com/questions/44924656/how-to-register-global-databinding-for-localdate-in-spring-mvc by cc-by-sa and MIT license