当前位置: 首页 > 知识库问答 >
问题:

如何修复为 REST API 映射的不明确处理程序方法

卫深
2023-03-14

新的 Rest API 是在很少有资源 GET endpoint的情况下开发的。调用endpoint时,我得到以下错误: 映射的处理程序方法不明确

我收到 500 错误。我哪里错了。请协助。谢谢

我尝试将requestmapping设置为name,path没有区别。

控制器类:

@CrossOrigin(origins = "*")
@RequestMapping(value = "/list", method = RequestMethod.GET)
Page<AuditEntity> AuditPageable(Pageable pageable) {

    return auditRepository.findAll(pageable);
}


@CrossOrigin(origins = "*")
@GetMapping("/{messageId}")
public Optional<AuditEntity> messageById(@PathVariable("messageId") String messageId) {

    return auditRepository.findById(messageId);
}

@CrossOrigin(origins = "*")
@RequestMapping(value = "/{serviceName}", method = RequestMethod.GET)
List<AuditEntity> servicePageable(@RequestParam("serviceName") String serviceName) {
    List<AuditEntity> services = auditRepository.findAll().stream().distinct().collect(Collectors.toList());
    return services;
}

接口代码:

公共接口AuditRepository扩展了JpaRepository{PagefindByMessageContains(@Param(“message”)字符串消息,可分页);

我希望GET调用返回数据并且不会抛出任何500错误

共有2个答案

涂玉韵
2023-03-14

其余 API 路径与以下 API 相同

1. @GetMapping("/{messageId}")

2. @RequestMapping(value = "/{serviceName}", method = RequestMethod.GET)

因此,您正在映射不明确的处理程序方法

潘泰
2023-03-14

例如,考虑以下 HTTP 请求:

GET /list/foo HTTP/1.1
Host: example.org

Spring无法区分是由第一种方法处理还是由第二种方法处理:

@GetMapping("/{messageId}")
Optional<AuditEntity> messageById(@PathVariable("messageId") String messageId) {
   ...
}
@RequestMapping(value = "/{serviceName}", method = RequestMethod.GET)
List<AuditEntity> servicePageable(@RequestParam("serviceName") String serviceName) {
    ...
}

对于Spring来说,这两种请求映射都是不明确的,适合处理请求。

要解决此问题,您可能需要将上面显示的第二种方法替换为:

@GetMapping
List<AuditEntity> servicePageable(@RequestParam("serviceName") String serviceName) {
    ...
}

所以HTTP请求可以是这样的:

GET /list?serviceName=foo HTTP/1.1
Host: example.org

其中< code>foo是< code>serviceName参数的值。

对于第一种方法,请求将如下所示:

GET /list/foo HTTP/1.1
Host: example.org

其中< code>foo是< code>messageId参数的值。

 类似资料:
  • 我用Java编写REST api,并使用Groovy和Spock进行测试。

  • 我有一个Spring应用程序,在其中我声明了我的类,如下所示: 但是当我试图到达其中一个restendpoint时,我得到一个错误:并且它指定这两个方法为问题。我的印象是,如果我更改了请求参数,Spring不会通过以下帖子抱怨它们是相同的:http://www.coderanch.com/t/598675/Spring/handling-http-request-parameters但显然它仍然如

  • 在我的Spring Boot应用程序中有以下两个方法: 我想通过(自动生成)或(,如果可用的话)来。 java.lang.IllegalStateException:映射到“/user/dis1”的处理程序方法不明确:{com.mua.cse616.model.user com.mua.cse616.controller.usercontroller.one(java.lang.long),com

  • 我有两种将实体映射到域的方法。 当我试图定义实体列表到域的映射方法时,我发现了用于映射集合元素的模糊映射方法。 有没有一种方法可以定义用于映射对象集合的方法

  • 使用Spring Boot 2.4.5和IntelliJ 2021.2。迁移后 到 每次我访问。页面上写着: 获取错误未定义/v3/api文档 当我检查日志时: java.lang.IllegalStateException:为“/v3/api文档”映射的不明确处理程序方法:{public org.springframework.http.ResponseEntity springfox.docu

  • 我正在使用mapstruct从一个DTO映射到另一个DTO。我有多个默认方法,但其中2个返回值为String,并且使用相同的类作为输入参数,这给我带来了“使用java MapStruct的模糊映射方法”错误。 错误:(16,7)Java:在将属性“java.lang.String StatusHistory”映射到java.util.Map:java.util.Map toMap(java.lan

  • 我正在使用mapstruct从一个DTO映射到另一个DTO。我有多个默认方法,但其中两个返回值为String,并且使用了与输入参数相同的类,这给了我“使用java MapStruct的mapping methods不明确”的错误。我在这里添加代码的相关部分: 错误是 发现将属性“Program ProgramInstance”映射到java.lang.String的映射方法不明确:java.lan

  • 我有这个“创建”方法来映射/列出帖子请愿。我创建了一个重载的方法“createEmpty()”,以便进行尝试,但后来删除了它,因为它抛出了一个org.springFramework.beans.factory.BeanCreationException来处理不明确的映射。 问题是我删除了said方法后,仍然得到了异常。 信息:Dev App Server现在正在运行5月04日4:21:34 PM