2015-10-08 5 views
4

У меня есть простой POJO, называемый Check. И у меня есть простой репозиторий отдыха:Spring data rest, java.util.Date в url param?

@RepositoryRestResource(collectionResourceRel = "check",path = "check") 
public interface RestCheckRepo 
     extends JpaRepository<Check,Integer> { 

    public List<Check> findByShopName(@Param("shop") String shop); 

    public List<Check> findByDateTime(@Param("dt")Date dt); 

    public List<Check> findByShopNameAndDateTime(@Param("shop")String shop, @Param("dt")Date dt); 

    public List<Check> findByShopNameAndDateTimeBetween(@Param("shopName") String shop, 
                 @Param("start")Date t1, 
                 @Param("end") Date t2); 


} 

Все работает отлично !! Но я не знаю, как реализовать обработчик запроса, используя java.util.Date как @RequestParam. Пример: http://localhost:8080/check/search/findByDateTime?dt= {значение}

UPDATE Запрос http://localhost:8080/check/search/findByDateTime?dt=2015-08-10T13:47:30 ---> Ответ:

{ 
    "cause": { 
     "cause":null, 
     "message":null 
    }, 
    "message":"Failed to convert from type java.lang.String to type @org.springframework.data.repository.query.Param java.util.Date for value '2015-10-07T15:04:46Z'; nested exception is java.lang.IllegalArgumentException" 
} 
+0

Я думаю, вам нужно разобрать его, как java.sql.Date не как Java .util.Date – NightsWatch

ответ

11

Решение @kucing_terbang будет работать, в противном случае есть более простое решение, вам нужно сделать, это:

public List<Check> findByShopNameAndDateTime(
    @Param("shop")String shop, 
    @DateTimeFormat(your-format-comes-here)@Param("dt")Date dt); 
2

Вы можете зарегистрировать собственный редактор, так что пружина в состоянии передать параметр в аргументе. Пример

@InitBinder 
public void dataBinding(WebDataBinder binder) { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    dateFormat.setLenient(false); 
    binder.registerCustomEditor(Date.class, "dob", new CustomDateEditor(dateFormat, true)); 
} 
+0

Ummm, где вы добавили этот метод? Разумеется, не интерфейс '' RestCheckRepo'', так? И нет контроллера, поскольку точка '' '@ RepositoryRestResource''' должна избегать необходимости в контроллере. Может быть, внутри какого-то аннотированного класса '' '@ Configuration'''? BTW, это поточно-безопасный? Я знаю, что '' SimpleDateFormat'' сам по себе не является. – BalRog

+0

Я бы выбрал использовать аннотированный класс '@ ControllerAdvice'. Я не уверен, будет ли он работать, если вы используете аннотированный класс @ @ Configuration. Что касается безопасности потоков, глядя на java-документ класса DataBinder, я бы сказал, что он потокобезопасен. Я имею в виду, если это небезопасно, тогда док будет указывать это. Но вы, вероятно, захотите проверить это, чтобы убедиться в этом. –

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