2016-01-27 4 views
1

У меня есть @RestController, который выглядит примерно так:Spring MVC GET @ModelAttribute java.util.Date типа с отметкой времени

@RestController 
public class EventSearchController { 

    @RequestMapping(value = "/api/eventSearch", method = RequestMethod.GET) 
    public List<EventDTO> eventSearch(@Valid 
            @ModelAttribute 
            EventSearchCommand eventSearchCommand) { 
    // ... 
    } 
} 

И мой EventSearchCommand выглядит следующим образом:

@Data 
public class EventSearchCommand { 

    // other fields that are not a problem here... 

    private Date startDate; 

    private Date endDate; 
} 

@Data здесь происходит от Project Lombok. Проблема у меня в том, что параметры STARTDATE и ENDDATE приходят на строку GET, как

?endDate=1453784399000&startDate=1453698000000 

ли не связывался должным образом, и я получаю эту ошибку:

Failed to convert property value of type java.lang.String to required type java.util.Date for property endDate; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @org.springframework.format.annotation.DateTimeFormat java.util.Date for value 1453784399000; nested exception is java.lang.IllegalArgumentException: Unable to parse 1453784399000

Каких конвертера (или, в идеале, @DateTimeFormat в проблемных областях) мне нужно написать, чтобы он правильно привязывался?

Я хотел бы отметить, что у меня есть другой контроллер настроить точно так же, за исключением того, объект помечается @RequestBody вместо @ModelAttribute и тело запроса является JSON объект, где даты передаются в виде целых чисел, а не строки.

ответ

2

Ну, я работаю над программным проектом, где я получаю некоторые параметры (из запроса GET), а два из них - метка времени. Я просто использовать что-то вроде:

public ModelAndView method(@ModelAttribute("it") Long it, @ModelAttribute("ft") Long ft /* some parameters that it doesn't matter here */) { 
    java.util.Date initialDate = new java.util.Date(it); //create a java.util.Date from a long representing timestamp. 
    // ... 
} 

Я не знаю, если я вас правильно, но это так, этот кусок кода может поместиться в вашей.

+0

Я думал о том, чтобы делать это раньше, но не был уверен, что это был самый «весенний» способ сделать что-то. Спасибо за ответ. – Andy

Смежные вопросы