1
我是Spring Boot的新手,我試圖使用HTTP OPTIONS來測試連接。Spring Boot自定義通過拋出異常接收HTTP選項的響應
我的設計是我有一個包含測試邏輯的Service類。我也有一個API控制器類來實現Service中的方法。
我目前的理解是,控制器可用於使用異常來回應不同的HTTP狀態。
這是我在控制器內部寫了這個目的的方法:
@PostMapping(path = "/test")
public ResponseEntity<Void> testConnection(@RequestBody URL url) {
try {
ControllerService.testConnection(url);
return ResponseEntity.status(HttpStatus.NO_CONTENT).body(null);
} catch (CredentialsException e) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(null);
} catch (URLException | URISyntaxException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
} catch (UnknownException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
異常觸發的方式和方法testConnection()是服務類中:
public static void testConnection(URL url)
throws URISyntaxException, CredentialsException, URLException, UnknownException {
String authHeaderValue = "Basic " + Base64.getEncoder().encodeToString(("user" + ':' + "password").getBytes());
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("Authorization", authHeaderValue);
RestTemplate rest = new RestTemplate();
final ResponseEntity<Object> optionsResponse = rest.exchange(url.toURI(), HttpMethod.OPTIONS, new HttpEntity<>(requestHeaders), Object.class);
int code = optionsResponse.getStatusCodeValue();
if (code == 403) {
throw new InvalidCredentialsException();
} else if (code == 404) {
throw new InvalidURLException();
} else if (code == 500) {
throw new UnknownErrorException();
} else if (code == 200){
String message = "Test connection successful";
LOGGER.info(message);
}
}
我有創建了這些自定義異常類。
這是在控制器方法內觸發正確的HTTP響應的正確方法還是Spring Boot有其他設計?如果是這樣,我的例外列表是否足夠全面或者是否需要向服務類中的testConnection()方法添加更多內容?
我認爲你可以使用一些Java Filter來捕捉異常,併爲每個異常返回具有特定http狀態碼的響應。這對你有幫助嗎?我也有其他的想法。 – Dherik
@Dherik嗨,感謝您的意見。我認爲過濾器應該工作。我會將它應用於我的Service類方法嗎? – pike