问题描述
使用media-type-versioning时,端点的不同版本应具有相同的URL,客户端可以将Accept
标头设置为所需的版本:例如
Accept: application/vnd.adventure-works.v1+json
对于版本2:
Accept: application/vnd.adventure-works.v2+json
控制器的伪代码:
@Controller('orders')
export class OrdersController {
@Get('orders/:id')
getordersV1(@Headers('Accept') acceptHeader: string) {
// accept header must be 'application/vnd.adventure-works.v1+json'
return {
orderId: 1,orderName: 'Order 1'
};
}
@Get('orders/:id')
getordersV2(@Headers('Accept') acceptHeader: string) {
// accept header must be 'application/vnd.adventure-works.v2+json'
return {
orderId: 1,name: 'Order 1'
};
}
解决方法
您可以尝试以下方法:
@Get('orders/:id')
getOrders(@Headers('Accept') acceptHeader: string) {
//Implement a manager class say OrderManager
OrderManager orderManager = new OrderManager(); // Better to @Inject in constructor
switch(acceptHeader) {
case ''application/vnd.adventure-works.v1+json'':
return orderManager.getOrdersV1();
case ''application/vnd.adventure-works.v2+json'':
return orderManager.getOrdersV2();
default:
// throw new InvalidInputException() if needed
break;
}
}