[英]Using REST calls in Spring to expose service layer
我有一個現有的Java代碼服務層,希望在某些REST調用中使用。 我要這樣做的方法是讓用戶在URL中傳遞服務ID,然后在后端查找服務和方法(在數據庫或配置文件中)並調用它。 例如:
調用此URL時,我將使用“ car”的serviceId並調用CarService。 我想我會有一個簡單的配置:
car=com.foobar.services.CarService
house=com.foobar.services.HouseService
etc..
有沒有辦法使用Spring做到這一點? 我所關心的不是調用服務,而是確定要調用的方法。 如果我有一個http://foobar.com/services/car/red的調用,我該如何傳遞'red'的方法參數並確定要調用的方法?
這是Java中的示例:
@RequestMapping(value = "{serviceId}")
@ResponseBody
public Object getMarshalledObject(@PathVariable String serviceId) {
if ("car".equals(serviceId)) {
return getCar();
}
throw new ServiceNotFoundException("Service ID not found.");
}
我將為每個服務創建單獨的控制器,並在從請求中提取相關信息后,將每個控制器委托給其相應的服務。
由於控制器及其方法上@RequestMapping
的性質,這應該很簡單:
@RequestMapping("/car")
class CarController {
@Autowired
private CarService service;
@RequestMapping("/{color}")
public Object getCarsByColor(@PathVariable String carColor) {
return service.getCarsByColor(houseColor);
}
}
@RequestMapping("/house")
class HouseController {
@Autowired
private HouseService service;
@RequestMapping("/{houseId}")
public Object getHouseById(@PathVariable int houseId) {
return service.getHouseById(houseId);
}
}
我們這里擁有兩個具有不同服務的不同控制器,這些控制器由應用於類的@RequestMapping
映射。 此外,控制器方法由url中其余的路徑元素調用。
而不是擁有此屬性的簡單屬性文件...
car=com.foobar.services.CarService
house=com.foobar.services.HouseService
...配置Spring(在適當的調度配置文件中)為您管理那些bean:
<bean id="car" class="com.foobar.services.CarService" />
<bean id="house" class="com.foobar.services.HouseService" />
假設您的服務類實現了一個公共接口(例如com.foobar.services.BaseService
),則在您的控制器中,您可以像這樣自動將它們連接起來:
@Autowired
@Qualifier("car")
private BaseService _carService;
@Autowired
@Qualifier("house")
private BaseService _houseService;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.