背景
NestJSで発生させた。401のエラーレスポンスをSpring Bootに返却し、RestTemplate上でエラーを返すようにしたかったのですが、なぜかレスポンスボディが入ってこず、対応に時間がかかったので、備忘録として書き記したいと思います。
原因
先に結論を言うと、以下のようにRestTemplateに別のHTTPクライアンライブラリーに切り替えることで、レスポンスボディが入ってくるようになります。
HttpClient httpClient = HttpClientBuilder.create().build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
原因は以下にSpring公式に記載のある通り、デフォルトの通りだと(java.netHTTP)だと、エラーを表す応答ステータスにアクセスする際に例外が発生する可能性があるからだそうです。問題に応じて別のHTTPクライアンライブラリーに切り替える必要があるようです。
https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#rest-resttemplate-create