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);
}
和这个请求:
发布的对象没有显示。
编译或发送请求时没有出现错误,城市的 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
}
}
有两组数据:省和城市。
各省的控制器工作正常。使用此方法发布后:
@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);
}
和这个请求:
发布的对象没有显示。
编译或发送请求时没有出现错误,城市的 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
}
}