Webアプリケーションでは、多くのRESTサービスがあります。突然、各要求の中で1つのオブジェクトを変更する必要があることがわかりました。 それでは、n
の異なるコントローラとRESTサービスがあるとしましょう。各コントローラでは、次のレイヤからサービスを呼び出す前に、リクエスト内のオブジェクトを変更する必要があります。各Webサービス呼び出しのオブジェクトの変更
質問はコントローラ内で何百もの変更を加えることなくこれを達成する方法です...これを行う簡単な方法はありますか?
UPDATE:私は、最初の例のように別のオブジェクトの内側にあるか、第二の選択肢のように単独で存在可能性があるあなたが見ることができるように、オブジェクトの詳細をmodiftする必要があり、各コントローラで
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping(path = "/order", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public OrderResponse getOrderData(@RequestHeader HttpHeaders httpHeaders,
@RequestBody OrderDataRequest orderDataRequest) {
// Use here interceptor to modify the object Details
// (inside OrderDataRequest) before below call:
OrderResponse resp = orderService.getOrderData(orderDataRequest);
return resp;
}
@RequestMapping(path = "/cancel/{orderId}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public boolean cancelOrder(@RequestHeader HttpHeaders httpHeaders,
@RequestBody Details details, @PathVariable Integer orderId) {
// Use here interceptor to modify object Details before below call:
return orderService.cancelOrder(details, orderId);
}
}
。
私の場合、( "/ *")ですべてのパスパターンをインターセプタレジストリに追加すれば十分でしょうか、それともそれを行うのがベストアイデアではありませんか?基本的に各サービスには私が修正する必要があるオブジェクトが含まれていますが、それは今です。将来的に変更されるかどうかはわかりません...そして、このインターセプタで各リクエストの中でオブジェクトを修正する方法は? – Lui
いいえ...混乱しています...このインターセプタを使用すると、着信要求からオブジェクトの1つを変更し、ビジネスレイヤからメソッドを呼び出す前にこれをどうやって行うのですか?更新された質問で私の例を見てください。 – Lui
コントローラの前で発生するようにインターセプタを設定した場合、要求によってコントローラに到達する前に要求本体にアクセスできます。あなたはここで必要なものを何でもすることができます。生データ(text/json)があることに注意してください。ターゲットを変更するには、アンマーシャリングまたはキーワードを使用してアクセスする必要があるかもしれません。 – Marvin