为了账号安全,请及时绑定邮箱和手机立即绑定

Java/Spring MVC:列出媒体类型/读取内容协商设置

Java/Spring MVC:列出媒体类型/读取内容协商设置

扬帆大鱼 2021-10-13 13:51:18
我想创建一个端点,告诉用户为 contentNegotiation 注册了哪些媒体类型。这些是我的设置     configurer             .favorPathExtension(false)             .favorParameter(true)             .parameterName("mediaType")             .ignoreAcceptHeader(true)             .useJaf(false)             .defaultContentType(MediaType.APPLICATION_JSON_UTF8)             .mediaType("json", MediaType.APPLICATION_JSON_UTF8)             .mediaType("pdf", MediaType.APPLICATION_PDF)             .mediaType("html", MediaType.TEXT_HTML)             .mediaType("csv", new MediaType("text", "csv"));如何在控制器中读取它们?我希望有一些函数 whatService.getMediaTypes 返回 ["json", "pdf", "html", "csv"]。编辑:或者一种获取所有 AbstractHttpMessageConverter 及其 MediaType 的方法。
查看完整描述

2 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

尝试这样的事情:


@RestController

public class YourRest {


    ...


    @Autowired

    private ContentNegotiationManager contentNegotiationManager;


    @RequestMapping(value = "types", method = RequestMethod.GET)

    public Set<String> getConfiguredMediaTypes() {

        return Optional.of(contentNegotiationManager)

                .map(m -> m.getStrategy(ParameterContentNegotiationStrategy.class))

                .map(s -> s.getMediaTypes().keySet())

                .orElse(Collections.emptySet());

    }


    ...

}


查看完整回答
反对 回复 2021-10-13
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

Content-Type 是一个请求头,您可以使用以下代码获取它:


@RequestMapping("/your-endpoint")

public void endpoint(@RequestHeader("Content-Type") String contentType)  {


}


查看完整回答
反对 回复 2021-10-13
  • 2 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信