簡體   English   中英

是否所有HTTP錯誤響應都具有相同的JSON結構?

[英]Should all HTTP error responses have the same JSON structure?

我們正在使用Spring Boot開發REST服務,並且想知道每個錯誤響應是否都應具有相同的JSON結構?

對於錯誤情況,我們的服務將以簡單的JSON格式進行響應。 例如,如果參數格式錯誤,我們將以HTTP狀態400和JSON進行響應:

{
  "errorCode": 05,
  "message": "provided paramter XY is malformed"
}

errorCode是我們的自定義代碼ID。 有人可能會爭論這種設計是否好,但是它很簡單並且可以被服務使用者輕松地處理。

現在,Spring Boot會自動創建一些錯誤響應。 例如,對於TypeMismatchException ,將創建HTTP狀態為400響應。 但是,當然,這些自動生成的響應沒有錯誤格式。

因此...我們遇到的情況是,服務使用者是否事先知道HTTP狀態400是否在主體中具有簡單的JSON錯誤格式。 我們是否應該真正覆蓋所有Spring Boot默認異常處理以在每個響應中放入我們的格式,還是服務使用者應該吞下苦澀的葯丸並確定是否使用了簡單的JSON格式?

這取決於您的項目規模。 如果許多應用程序都使用您的API,則應采用“捕獲所有內容並使用JSON格式”的方法。 是的,您還有更多工作要做,但是當公司中的所有其他應用程序都可以使用您的標准方式時,它們可以節省大量時間。

在我參與的大多數項目中,我們也有一種“標准方式”來返回我們的錯誤響應(也是JSON):

@RestControllerAdvice
public class GlobalResourceExceptionHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(GlobalResourceExceptionHandler.class);

    // the class ValidationError contains the properties the json should contain.
    @ExceptionHandler(Exception.class)
    public List<ValidationError> exceptionHandler(Exception e, HttpServletResponse response) {
        LOGGER.warn("Exception thrown in a resource", e);
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return Collections.singletonList(new ValidationError(null, "unexpected exception"));
    }
}

您可以使用更多@ExceptionHandler擴展類。

事實證明,這是一個很好的方法,因為它易於實現(對於小型應用程序),並且涉及很多方面。 基本上,很多意味着與休息請求有關的一切。 排除的是資源處理程序,它提供了angular-app和安全層。

更新:結論:當擁有許多應用程序使用的api時,可以捕獲所有內容。 在兩種情況下(小應用程序或大應用程序),都應使用上面顯示的方式開始錯誤處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM