簡體   English   中英

在Spring中使用REST調用公開服務層

[英]Using REST calls in Spring to expose service layer

我有一個現有的Java代碼服務層,希望在某些REST調用中使用。 我要這樣做的方法是讓用戶在URL中傳遞服務ID,然后在后端查找服務和方法(在數據庫或配置文件中)並調用它。 例如:

http://foobar.com/rest/car

調用此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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM