Spring Boot RequestMapping在第一个Pathvariable之后无法正常工作

时间:2017-12-21 15:02:08

标签: spring spring-boot request-mapping

有两组数据:城市

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

@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);
}

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

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

使用 CityService

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

并使用以下方法阅读:

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

和此请求:

  

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

发布的对象未显示。

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

<input value="" id="date1" type="text" class="validate important datepicker">

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

1 个答案:

答案 0 :(得分:2)

要开始的一个问题是您的路径是/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
        }

    }