Spring 引导请求映射在第一个路径变量后不工作

Spring Boot RequestMapping not working after first Pathvariable

有两组数据:城市

各省的控制器工作正常。使用此方法发布后:

@RequestMapping(method=RequestMethod.POST, value="/provinces")
public void addProvince(@RequestBody Province province) {
    provinceService.addProvince(province);
}

并使用此方法获取:

@RequestMapping("/provinces")
public List<Province> getAllProvinces( ) {
    return provinceService.getAllProvinces();
}

我发布的对象显示在我的浏览器中。

{
    "id": "ks",
    "name": "Kangso",
    "description": "Peace River and So City"
}

但是,在向该省份发布 城市 后:

@RequestMapping(method=RequestMethod.POST, 
        value="/provinces/{provinceId}/cites/")
public void addCity(@RequestBody City city, 
        @PathVariable String provinceId) {
    city.setProvince(new Province(provinceId, "", ""));
    cityService.addCity(city);
}

使用CityService中的方法:

public void addCity(City city) {
    cityRepository.save(city);
}

并用以下方法阅读:

@RequestMapping("/provinces/{provinceId}/cities")
public List<City> getAllCities(@PathVariable String provinceId) {
    return cityService.getAllCities(provinceId);
}

和这个请求:

http://localhost:8080/location/provinces/ks/cities/

发布的对象没有显示。

编译或发送请求时没有出现错误,城市的 RequestMapping 与其他请求一样工作:

Mapped "{[/provinces/{provinceId}/cites/],methods=[POST]}"
Mapped "{[/provinces/{provinceId}/cities]}"
Mapped "{[/provinces]}"
Mapped "{[/provinces],methods=[POST]}"

我不确定城市是否正确发布,现在我也在尝试使用 eclipse STS 检查在 CityService 中实际发布的内容。

首先要解决的问题是您的路径是 /provinces/{provinceId}/cites/,应该是 /provinces/{provinceId}/cities/。我不认为这是问题的核心,但是,我相信这就是您没有看到任何错误的原因。

我相信,如果您的路径是正确的,您会得到一个错误,即 Province(由 new Province(provinceId, "", "") 定义)不是托管实体。您不能将该省与城市等相关联,因为它不是持久化的。一旦持久化,您将拥有一个 ID,这将允许创建关系。

您的方法正在创建一个新的空省份,因此未对 provinceId 参数执行任何操作。您需要获取该参数,并尝试先获取一个省份对象。

@RequestMapping(method=RequestMethod.POST, 
            value="/provinces/{provinceId}/cities/")
    public void addCity(@RequestBody City city, 
            @PathVariable String provinceId) {

        Province p = provinceService.findOne(provinceId);

        if (p != null) {
            city.setProvince(p);
            cityService.addCity(city);
        } else {
            // probably should throw a not found error here for the province
        }

    }