繁体   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