acv*_*vcu 2 java spring spring-mvc
我有一个现有的Java代码服务层,我想在一些REST调用中使用它.我想这样做的方法是让用户传入URL中的服务ID,然后在后端查找服务和方法(在DB或配置文件中)并调用它.例如:
调用此URL时,我将使用"car"的serviceId并调用CarService.我想我会有一个简单的配置:
car=com.foobar.services.CarService
house=com.foobar.services.HouseService
etc..
Run Code Online (Sandbox Code Playgroud)
有没有办法用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.");
}
Run Code Online (Sandbox Code Playgroud)
我会为每个服务制作单独的控制器,并在从请求中提取相关信息后让每个控制器委托给相应的服务.
由于@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);
}
}
Run Code Online (Sandbox Code Playgroud)
我们这里有两个不同的控制器,它们通过@RequestMapping应用于类的映射来映射.此外,控制器方法由来自URL的剩余路径元素调用.
| 归档时间: |
|
| 查看次数: |
2654 次 |
| 最近记录: |