Java/SpringMVC:列出媒体类型/读取内容协商设置
我想创建一个端点,它告诉用户哪些MediaType是为contentNegotiation注册的 这些是我的设置Java/SpringMVC:列出媒体类型/读取内容协商设置,java,spring-mvc,Java,Spring Mvc,我想创建一个端点,它告诉用户哪些MediaType是为contentNegotiation注册的 这些是我的设置 configurer .favorPathExtension(false) .favorParameter(true) .parameterName("mediaType") .ignoreAcceptHeader(true) .use
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"));
如何在控制器中读取它们?我希望有一些函数whateverService.getMediaTypes能够返回[“json”、“pdf”、“html”、“csv”]
编辑:或者是获取所有AbstractHttpMessageConverter及其媒体类型的方法。
内容类型
是一个请求头,您可以使用以下代码获取它:
@RequestMapping("/your-endpoint")
public void endpoint(@RequestHeader("Content-Type") String contentType) {
}
请参阅spring的文档尝试以下内容:
@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());
}
...
}
@RestController
公共课休息{
...
@自动连线
私人ContentNegotiationManager ContentNegotiationManager;
@RequestMapping(value=“types”,method=RequestMethod.GET)
公共集getConfiguredMediaTypes(){
返回可选的.of(contentNegotiationManager)
.map(m->m.getStrategy(参数contentNegotiationStrategy.class))
.map(s->s.getMediaTypes().keySet())
.orElse(Collections.emptySet());
}
...
}
是,但这将列出此特定端点允许的媒体类型。我想得到一个,我通常将其定义为内容协商的媒体类型。如果这有道理的话。