有两组数据:省和城市。
省的控制器正常工作。使用此方法发布后:
@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]}"
和此请求:
发布的对象未显示。
编译或发送请求时没有出现错误,城市的RequestMapping像其他请求一样工作:
<input value="" id="date1" type="text" class="validate important datepicker">
我不确定该城市是否已正确发布,现在我也正在尝试使用eclipse STS检查CityService中实际发布的内容。
答案 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
}
}