[英]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-asl
和jackson-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.