簡體   English   中英

在帶有 MVC REST API 的 SpringBoot 項目中返回 406 響應

[英]In a SpringBoot project with MVC REST API is returning 406 response

我正在開發一個 SpringBoot 項目,該項目使用常規 MVC 機制來公開 REST API。

在一個特定的 GET API 中,我收到了 406 HTTP 響應。

這是我的 Controller 方法的外觀:

    @GetMapping(path = "/analysis/detail/{analysisId}")
    public ResponseEntity<AnalysisDetailResponse> getAnalysisDetails(
            @PathVariable @NotNull Long analysisId) throws BusinessException {
        AnalysisDetailResponse analysisDetailResponse = analysisService.getAnalysisDetailsByAnalysisId(analysisId);
//        return ResponseEntity.ok(analysisService.getAnalysisDetailsByAnalysisId(analysisId));
        return ResponseEntity.ok(analysisDetailResponse);
    }

AnalysisDetailResponse 是使用 Lombok 創建的(在其他 API 的情況下可以完美地工作)

@Builder
@ToString
public class AnalysisDetailResponse {

    @NotNull
    private Long id;

    @NotNull
    private AnalysisStatus state;

    private String failedSummary;

    @NotNull
    @NotEmpty
    @Valid
    private List<PostDetail> posts;

    @Builder
    @ToString
    private static class PostDetail {

        @NotNull
        private Long id;

        @NotNull
        private float score;

        @NotNull
        private String body;

        private List<String> childBodyList;
    }
}

我已經驗證了整個 Response 對象的內容,它似乎是完美的。 但是,響應始終是 406。

我需要 JSON 格式的響應,因此,IMO 沒有必要明確提及響應類型。

盡管如此,我嘗試將以下內容添加到 @GetMapping 注釋中,但沒有發現任何運氣:

produces = MediaType.APPLICATION_JSON_VALUE

大多數相關帖子都建議添加jackson-mapper-asljackson-core-asl庫。 我試過了,但這沒有任何區別

請注意,正是這個特定的 API 導致了問題。 在同一個控制器中定義的其他 API 工作正常。

請建議....

更新:我正在嘗試使用 Postman 訪問 API,並且我確實嘗試明確添加Accept Header 參數。 沒有運氣

通過更新 Response 對象類的定義,最終能夠使其工作。 使用了 Lombok,我將@Data注釋應用於 Response 類以及靜態內部類。 動機是將多個 Lombok 注釋合並為一個 用包括@NoArgsConstructor, @AllArgsConstructor, @Getter, @Setter在內的更詳細的集合替換@Data注釋解決了該問題。

因此,在這種情況下,這些 Lombok 注釋中的一個或多個是真正的罪魁禍首: @ToString, @EqualsAndHashCode, @RequiredArgsConstructor

暫無
暫無

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

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