【问题标题】:Clashing method signatures冲突方法签名
【发布时间】:2018-10-26 00:37:20
【问题描述】:

我正在尝试使用两种保存方法创建一个休息控制器。一种用于保存单个实体,另一种用于保存实体列表。

@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)
}

但是,由于,我认为,类型擦除弹簧会引发以下异常。

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]
...

有什么线索吗?

【问题讨论】:

    标签: spring generics kotlin


    【解决方案1】:

    这是因为您有相同的请求映射。 Spring 无法根据请求负载区分请求 - 仅在方法、路径和标头上。 您可以尝试从此处应用建议:Jackson mapping Object or list of Object depending on json input

    对于你的情况,它看起来像

    @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)
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-09
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多