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

Groovy-不明确的处理程序方法

阙俊友
2023-03-14

我用Java编写REST api,并使用Groovy和Spock进行测试。

@GetMapping(value = "/{id}")
    public ResponseEntity<ExampleObj> findById(@PathVariable Long id) {
        final ExampleObj dto = service.findById(id);
        if (dto != null) {
            return new ResponseEntity<ExampleObj>(dto, HttpStatus.OK);
        }
        return new ResponseEntity<ExampleObj>(dto, HttpStatus.NOT_FOUND);
    }

@GetMapping(value = "/{name}")
public ResponseEntity<ExampleObj> findByName(@PathVariable String name) {
    final ExampleObj dto = service.findByName(name);
    if (dto != null) {
        return new ResponseEntity<ExampleObj>(dto, HttpStatus.OK);
    }
    return new ResponseEntity<ExampleObj>(dto, HttpStatus.NOT_FOUND);
}
@Unroll
    'findByName test'() {
        when:
            def response = restTemplate.getForEntity(url, ExampleObj)
        then:
            response.getStatusCode() == statusCode
        where:
            url                                 | statusCode
            '/endpoint/SomeName1'           | HttpStatus.OK
            '/endpoint/NotExistingName'    | HttpStatus.NOT_FOUND

    }

@Unroll
    'findById test'() {
        when:
            def response = restTemplate.getForEntity(url, ExampleObj)
        then:
            response.getStatusCode() == statusCode
        where:
            url                 | statusCode
            '/endpoint/1'    | HttpStatus.OK
            '/endpoint/2'    | HttpStatus.NOT_FOUND

    }

共有1个答案

公羊涛
2023-03-14

Spring无法区分“/{id}”和“/{name}”。它确实是模棱两可的,因为即使name是字符串,id是数字,name也可以是“43”的形式。因此,当您调用“/43”时,它可以被解释为一个名称(字符串“43”),也可以被解释为一个长的too(43)。

您可以使用类似于:

@GetMapping(value = "/")
public ResponseEntity<ExampleObj> findByName(@RequestParam("name") String name) {
...
 类似资料:
  • 我有一个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

  • 我正在使用JBoss6.1、Spring3.2、hibernate验证以及最近启用的CORS支持。请求与GET方法配合良好。如果使用请求方法POST,我希望控制器返回405。但我得到的是http状态码400。我在jboss日志中启用了跟踪,发现spring返回了错误的处理程序。应用程序只有一个控制器接受POST请求方法,其余控制器定义为只接受GET方法。每当使用POST请求方法对这些控制器(用GE

  • 问题内容: 任何人都可以澄清一下下面的过程是否是正确的处理流程流的方法,而没有任何流缓冲区已满和阻塞问题 我正在从Java程序中调用外部程序,正在使用ProcessBuilder来构建流程,执行之后 我正在使用一种方法来处理流程 在我的方法中,我试图处理流程流 readStream方法用于读取我的流文本。 问题答案: 不,那不是正确的方法。 首先,在某些系统上,您的代码将永远停留在调用中,因为该过

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

  • 我正在为Spring MVC中的异常处理开发示例演示应用程序。我正在尝试使用@ControllerAdvice处理异常 我遵循了本链接中描述的步骤。 但是当我运行我的应用程序时,我得到了以下错误 以下是我正在学习的课程 应用程序异常。JAVA 控制器类 ApplicationExceptionController。JAVA 下面是GlobalExceptionHandler类 GlobalExce