2016-04-05 2 views
0

Spring MVC контроллерspring mvc post преобразовать Long to Date?

@RequestMapping(method = RequestMethod.POST) 
public Result<String> create(CouponModel model) {//...} 

CuponModel: 
private Date beginDate; 
private Date overDate; 

когда вызов этого апи

curl -X POST -d '...&beginDate=1459500407&overDate=1459699200' 'http://localhost:8080/coupons' 
Error 400 Bad Request 

первого ничего выход журнала ошибок, а затем изменен на debug уровень, Ouput

Field error in object 'couponModel' on field 'beginDate': rejected value [1459500407]; codes [typeMismatch.couponModel.beginDate,typeMismatch.beginDate,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [couponModel.beginDate,beginDate]; arguments []; default message [beginDate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'beginDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.validation.constraints.NotNull java.util.Date for value '1459500407'; nested exception is java.lang.IllegalArgumentException] 

Как дать параметр долго преобразовать дата в модели?

Я попытался ниже пути, но он не работает

public class StringToDateConverter implements Converter<String, Date> { 

    @Override 
    public Date convert(String source) { 
     if (source == null) { 
      return null; 
     } 
     return new Date(Long.valueOf(source)); 
    } 

} 

@Configuration 
@EnableWebMvc 
public class WebMvcContext extends WebMvcConfigurerAdapter { 
    @Override 
    public void addFormatters(FormatterRegistry registry) { 
     registry.addConverter(new StringToDateConverter()); 
    } 
} 

ответ

3

Добавить инициализации связующего в контроллере, чтобы сказать весной, как он должен преобразовать дату:

Пример:

@InitBinder 
    protected void initBinder(WebDataBinder binder) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 
     binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat,false)); 
    } 
+0

да, спасибо! оно работает. если параметр подобен этому 'beginDate = 06-04-2016 & overDate = 10-04-2016', но я хочу, чтобы' new Date (1459500407) ' – zhuguowei

+0

, и вы знаете, почему мой способ не работает? – zhuguowei

0

Спасибо @Rafik BELDI! Мой путь

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { 
     public void setAsText(String value) { 
      setValue(new Date(Long.valueOf(value))); 
     } 

    }); 
} 

см Spring MVC - Binding a Date Field