Подтвердить что ты не робот

Spring Метод запроса данных с необязательным параметром @Param

Возможно ли, чтобы метод запроса @Params был необязательным, особенно в случае Spring Data REST?

Например, я хотел бы привязать очень похожий поиск к тому же пути ресурса. Чтобы сделать это сейчас, мне понадобится следующее:

@RestResource(path = "driver", rel = "byDriver")
List<Bar> findByDriverId(@Param("id") String id, Pageable pageable);

@RestResource(path = "driverAndSpan", rel = "byDriverAndSpan")
List<Bar> findByDriverIdAndStartTimeGreaterThanEqualAndEndTimeLessThanEqual(@Param("id") String id, @Param("start") Date start,
        @Param("end") Date end, Pageable pageable);

Что дает мне:

byDriver: {
  href: "http://localhost:8080/foo/search/driver{?id,page,size,sort}",
},
byDriverAndSpan: {
  href: "http://localhost:8080/foo/search/driverAndSpan{?id,start,end,page,size,sort}",
}

Что я хочу, так это возможность увидеть что-то вроде следующего пути, где start и end являются необязательными параметрами, а не определяют несколько методов в моем репозитории.

byDriverAndSpan: {
  href: "http://localhost:8080/foo/search/driverAndSpan{?id,*start,*end,page,size,sort}",
}

Что может выглядеть так:

@RestResource(path = "driverAndSpan", rel = "byDriverAndSpan")
List<Bar> findByDriverIdAndStartTimeGreaterThanEqualAndEndTimeLessThanEqual(@Param("id") String id, @Param(value = "start", optional = true) Date start,
        @Param(value = "end", optional = true) Date end, Pageable pageable);
4b9b3361

Ответ 1

Нет, это в настоящее время не поддерживается. Если бы это было, то был бы риск двусмысленности. Может существовать сценарий, в котором входящий URL может соответствовать более 1 @RestResource.

Чтобы объяснить с точки зрения Java, скажем, мы могли бы определить два метода:

getPerson(String firstName, int age);

getPerson(String firstName, {Optional} int age, int phoneNumber);

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