Java / Spring MVC: список mediaTypes / Read Content Negotiation Settings - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу создать конечную точку, которая сообщает пользователю, какие типы медиа зарегистрированы для 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"].

- Edit

В качестве альтернативы метод для получениявсе AbstractHttpMessageConverter и их MediaTypes.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Попробуйте что-то вроде этого:

@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());
    }

    ...
}
0 голосов
/ 26 сентября 2018

Content-Type является заголовком запроса, и вы можете получить его с помощью следующего кода:

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

}

См. @ RequestHeader документов

для Spring
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...