当前位置: 首页 > 知识库问答 >
问题:

在一个使用MVC的SpringBoot项目中,RESTAPI返回406响应

于嘉许
2023-03-14

我正在进行一个SpringBoot项目,该项目使用常规MVC机制来公开REST API。

在一个特定的GET API中,我得到了406HTTP响应。

下面是我的控制器方法的样子:

    @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-asljackson-core-asl 库。我试过了,但这没有任何区别

请注意,正是这个特定的API导致了问题。在同一控制器中定义的其他API工作正常。

请建议...

更新:我尝试使用Postman访问API,并尝试显式添加Accept头参数。没有运气

共有1个答案

白彦
2023-03-14

通过更新响应对象类的定义,最终能够让它工作。使用了Lombok,我将< code>@Data注释应用于响应类和静态内部类。动机是将多个Lombok注释合并成一个,用一个更详细的集合替换< code>@Data注释,包括< code>@NoArgsConstructor、@AllArgsConstructor、@Getter、@Setter解决了这个问题。

因此,在这种情况下,一个或多个Lombok注释是真正的罪魁祸首:@ToString、@EqualsAndHashCode、@RequiredArgsConstructor

 类似资料:
  • 我希望在spring boot中返回类似以下内容的json响应: 我的RestController如下所示 但我得到的反应是这样的

  • 问题内容: 在我的科目表中,我按学期和月份列出了所有学生的课程,每个月的分数 这就是我尝试过的 我从查询中获得的当前输出是每个查询的多个响应,因为我可以将其更改为,但不会获取其他数据 我的问题是我如何将它们合并为一个响应,并在预期的输出中返回以下数据(我在每个字段中添加了一些说明以对其进行解释) 预期产量 问题答案: 问题是,您想获取主题,而不是学生。因此,我反转了FROM和LEFT JOIN。因

  • 我正在开发一个应用程序,它将被用作restful服务,响应必须以JSON的形式返回。y p 我正在使用Spring MVC,并遵循本文来实现同样的目标 https://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/ 我在POM中添加了Jackson jar,启用了响应体和mvc注释驱动的注释。但还是在启动url时,我得到了406个不

  • 问题内容: 我正在使用Ajax简化Spring 3.0文章中指定的带有JSON的Spring MVC 。 根据各种论坛上的建议对我的代码进行了无数次尝试和修改之后,我的代码仍然无法正常工作。 我继续收到以下错误:(406)根据请求“接受”标头(),此请求标识的资源只能生成特性不可接受的响应。 根据需要,我在appconfig.xml中。 app-config.xml mvc-config.xml

  • 我用SpringBoot做了一个RESTAPI项目。控制器中有各种标准方法,如get、post、put和delete。 我的目标是使我能够通过angular应用程序仅访问api调用(get调用除外)。其他方法(post、put和delete)无法从外部访问。 我试图用WebSecurityConfigureAdapter和configure函数来解决这个问题,但我没有得到它。当我第一次在pom上导

  • Spring不会忽略文件扩展名 SpringMVC:依赖于url扩展的不一致映射行为