Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/SpringMVC:列出媒体类型/读取内容协商设置_Java_Spring Mvc - Fatal编程技术网

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

Java/SpringMVC:列出媒体类型/读取内容协商设置,java,spring-mvc,Java,Spring Mvc,我想创建一个端点,它告诉用户哪些MediaType是为contentNegotiation注册的 这些是我的设置 configurer .favorPathExtension(false) .favorParameter(true) .parameterName("mediaType") .ignoreAcceptHeader(true) .use

我想创建一个端点,它告诉用户哪些MediaType是为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"));
如何在控制器中读取它们?我希望有一些函数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());
}
...
}

是,但这将列出此特定端点允许的媒体类型。我想得到一个,我通常将其定义为内容协商的媒体类型。如果这有道理的话。