为什么Spring Boot没有读取我的接口资源上定义的PathVariable?

时间:2018-01-31 06:58:12

标签: java spring spring-mvc spring-boot

我正在使用自定义代码生成器将REST合约转换为Java接口。下面是一个生成的资源Java接口的示例。

@Generated(
    date = "2018-01-30T11:56:25.156Z",
    comments = "Specification filename: country.v1.json",
    value = "GENERATOR"
)
@RequestMapping("/v1/countries")
public interface CountriesResource {

  @RequestMapping(
      method = RequestMethod.GET,
      path = "/{id}",
      produces = MediaType.APPLICATION_JSON_VALUE
  )
  @ResponseBody
  LandGetResourceModel getEntity(@PathVariable("id") String id);
}

此外,生成器为Spring创建一个@RestController实现,以创建控制器bean。

@RestController
public class CountriesResourceImpl implements CountriesResource {

    @Override
    public CountryGetResourceModel getEntity(String id) {
        return new CountryGetResourceModel();
    }
}

到目前为止一切正常。 Spring创建了RestController bean,并且HTTP调用被正确定向到相应的Handler方法(例如getEntity)。

问题在于,由于某种原因,Spring在接口上定义路径变量时无法解析路径变量。处理包含路径变量的所有调用,但任何路径变量的方法参数都是null。如果我然后将PathVariable注释添加到实现类中,Spring就能够解析相应的值。

有没有办法告诉Spring从接口方法声明中读取PathVariable,就像它对RequestMapping注释一样?

1 个答案:

答案 0 :(得分:2)

不幸的是,这似乎是一个已知问题。我在这个问题上找到了the following opened Jira。可以从this answer找到一些解释。另外,在the same question中,我看到了this solution之前的答案。但是,我没有尝试过它,似乎很重。