2016-04-05 24 views
0

Bahar MVC denetleyicisi çağrı bu APIbahar mvc post Uzun Çevirme tarihi?

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

ilk şey hata günlüğü çıktı, ardından debug seviyeye değişti

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

CuponModel: 
private Date beginDate; 
private Date overDate; 

, parametre uzun dönüştürmek izin nasıl

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] 

çıkışına modelde tarih mi?

Bu arada aşağıda denedik ama

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()); 
    } 
} 

cevap

3

o tarih dönüştürmek nasıl yayı anlatmak için, sizin Kontrolör bir init bağlayıcı ekle çalışmaz:

Örnek:

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

evet, teşekkür bakın olduğunu! işe yarıyor. Parametre şöyle ise 'beginDate = 06-04-2016 & overDate = 10-04-2016' ama ben istiyorum 'Date Date (1459500407)' – zhuguowei

+0

ve neden yolumun çalışmadığını biliyor musunuz? – zhuguowei

0

Teşekkürler @Rafik BELDI! Benim yöntemim

@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