我正在开发一个SpringBoot项目,该项目使用常规的MVC机制来公开REST。
在一个特定的GET中,我得到了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的情况下,Lombok运行得非常完美)
@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;
}
}
我已经验证了整个响应对象的内容,它似乎是完美的。然而,答复总是406。
我需要JSON格式的响应,因此,明确提到响应类型并不是必要的,IMO。
尽管如此,我还是尝试将以下内容添加到@GetMapping注释中,但没有发现任何结果:
produces = MediaType.APPLICATION_JSON_VALUE
大多数相关帖子都建议添加jackson-mapper-asl
和jackson-core-asl
库。我试过了,但没什么区别
请注意,正是这个特定的API导致了问题。在同一个Controller中定义的其他API运行良好。
请建议..。
更新:我正在尝试使用访问,并且我确实尝试显式地添加Accept标头参数。没有运气
发布于 2021-10-13 16:21:14
通过更新Response对象类的定义,最终能够完成这项工作。Lombok被使用,我将@Data
注释应用于响应类以及静态内部类。其动机是将多个Lombok注释合并为一个,用一个更详细的集合取代@Data
注释,包括@NoArgsConstructor, @AllArgsConstructor, @Getter, @Setter
,解决了这个问题。
因此,在这个场景中,一个或多个Lombok注释才是真正的罪魁祸首:@ToString, @EqualsAndHashCode, @RequiredArgsConstructor
https://stackoverflow.com/questions/69548203
复制相似问题