Сцепление подписей метода - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь создать контроллер отдыха двумя способами сохранения.Один для сохранения одного объекта и один для сохранения списка объектов.

@RequestMapping(method = [POST, PUT])
fun save(@RequestBody entity: T): T {
    return service.save(entity)
}

@RequestMapping(method = [POST, PUT])
fun save(@RequestBody entities: List<T>): List<T> {
    return service.save(entities)
}

Однако из-за того, что я предполагаю, тип erasure spring создает следующее исключение.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'crudControllerImpl' method 
public final T dk.fitfit.send.mail.CrudController.save(T)
to {[/messages],methods=[POST || PUT]}: There is already 'crudControllerImpl' bean method
public final java.util.List<T> dk.fitfit.send.mail.CrudController.save2(java.util.List<? extends T>) mapped.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1694) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
...

Любая подсказка?

1 Ответ

0 голосов
/ 26 октября 2018

Это потому, что у вас одинаковые сопоставления запросов.Spring не может различить запросы на основе полезной нагрузки - только по методу, пути и заголовкам.Вы можете попробовать применить предложение здесь: Отображение Джексона Объект или список объектов в зависимости от ввода json

Для вашего случая это будет выглядеть как

@RequestMapping(method = [POST, PUT])
fun save(@RequestBody @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) entities: List<T>): List<T> {
    return service.save(entities)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...