restcontroller requestmapping query example spring rest controller spring-boot ambiguous-call

requestmapping - SpringBoot @RestController, se encontrĂ³ un mapeo ambiguo



spring controller example @requestmapping (2)

Hola, tengo un RestController simple en mi muestra:

@RestController public class PersonController { @RequestMapping(name = "/getName", method = GET) public String getName() { return "MyName"; } @RequestMapping(name = "/getNumber", method = GET) public Double getNumber(){ return new Double(0.0); } }

Y tengo SampleController para iniciar SpringBoot:

@SpringBootApplication @Controller public class SampleController { public static void main(String[] args) throws Exception { SpringApplication.run(SampleController.class, args); } }

Cuando intento ejecutar SampleCotroller ocurre la siguiente excepción:

Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map ''personController'' bean method public java.lang.Double com.web.communication.PersonController.getNumber() to {[],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already ''personController'' bean method public java.lang.String com.web.communication.PersonController.getName() mapped.

Donde el problema puede ser? No puede haber más RequestMappings en un RestController?

Muchas gracias por la respuesta


Debe usar el atributo de value para definir la asignación. Usó el name este momento, que solo proporciona un nombre para la asignación, pero no define ningún tipo de mapeo. Por lo tanto, actualmente, ambos métodos no están asignados (en cuyo caso, ambos se asignan a la misma ruta). Cambiar los métodos a:

@RequestMapping(value = "/getName", method = GET) public String getName() { return "MyName"; } @RequestMapping(value = "/getNumber", method = GET) public Double getNumber(){ return new Double(0.0); }


O puedes usar,

@GetMapping("/getName")

Es el mismo uso de método con valor, es una nueva versión del método de especificación = "POST" con el valor de asignación de solicitud.