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