【发布时间】:2018-04-21 16:33:00
【问题描述】:
我正在尝试遵循休息原则,所以我有两个休息控制器
带有基本 URL localhost:8088/trucks。
首先,我必须得到所有卡车:
@GetMapping(value = "/trucks")
public final Collection<TruckDto> getAllTrucks() {
LOGGER.debug("test: getAllTrucks()");
Collection<Truck> trucks = truckService.getAllTrucks();
return mappingService.map(trucks, TruckDto.class);
}
请注意,我的问题还与我为 truckById 和 truckByTruckCode 返回的不同课程有关。
我有“按 ID 取车”服务:
@GetMapping(value = "/trucks/{truckId:[0-9]+}")
@ResponseStatus(HttpStatus.FOUND)
@ResponseBody
public final TruckDto getTruckId(@PathVariable(value = "truckId") final Integer truckId) {
LOGGER.debug("test: truckId({})", truckId);
Truck truck = truckService.getTruckById(truckId);
return mappingService.map(truck, TruckDto.class);
}
现在我有一个 get by truckCode 可以工作,但它不遵循其余原则,就像应该只有一个基本 url 并且所有其他人都从它构建,这里是
@ResponseStatus(HttpStatus.OK)
@ResponseBody
@GetMapping(value = "/trucks/{truckCode:[0-9]*[a-zA-Z][a-zA-Z0-9]*}")
public final TruckWithAvgPetrolDto getTruckByTruckCode (@PathVariable(value = "truckCode")
final String truckCode) {
LOGGER.debug("getTruckByTruckCode()");
TruckWithAvgDto truck = truckService.getTruckByTruckCode(truckCode);
return mappingService.map(truck, TruckWithAvgPetrolDto.class);
}
现在它可以工作了,但我认为它应该是一个可选参数,因为它应该是一种方法。所以也许我可以有某种可选的返回类型,因为我有两种不同的服务,两种情况下的返回方法。
因为get by id 只获取卡车详细信息,但get by trukCode 执行左连接并从订单表中获取卡车平均汽油消耗量,所以我有两个不同的 DTO 用于 get by id 和 get by truckCode。
我的问题是,如果我输入一个数字,它应该通过 id 获取并返回 TruckDto,但如果我输入像 BY788 这样的代码,它应该通过代码获取并返回 TruckWithAvgPetrolDto .这可能吗?
【问题讨论】: