Spring Boot内容协商配置

时间:2018-07-15 08:55:40

标签: java spring spring-mvc spring-boot

使用spring-boot配置内容协商时遇到困难。 我想保留大多数默认的spring-boot配置。 我关注了以下https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc/ 不是最近的教程。目前,当我发送对application/jsontxt/html的请求时,视图似乎没有得到解决,但是当我打开@EnableWebMvc时,它似乎得到了解决。 下面是我当前的配置。

@Configuration // according to the spring-boot docs this should be enough with spring-boot
//@EnableWebMvc  If I enable this content-negotiation seems to work without any configuration, but I loose the default spring-boot configuration
public class MvcConfiguration implements WebMvcConfigurer {


    @Bean(name = "jsonViewResolver")
    public ViewResolver getJsonViewResolver() {
        return new JsonViewResolver();
    }


    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    // Simple strategy: only path extension is taken into account
        configurer.favorPathExtension(true)
            .defaultContentType(MediaType.TEXT_HTML)
            .mediaType("html", MediaType.TEXT_HTML)
            .mediaType("json", MediaType.APPLICATION_JSON);
}

    @Bean
    public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager) {
        ContentNegotiatingViewResolver resolver = newContentNegotiatingViewResolver();
        resolver.setContentNegotiationManager(manager);
        return resolver;
    }
}

1 个答案:

答案 0 :(得分:1)

您没有在内容协商管理器中注册解析器。

请尝试以下修改:

@Bean
public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager){
  ContentNegotiatingViewResolver resolver = newContentNegotiatingViewResolver();
  resolver.setContentNegotiationManager(manager);
  List<ViewResolver> resolvers = new ArrayList<>();
  ViewResolver aViewResolver = getJsonViewResolver();
  resolvers.add(aViewResolver);
  resolver.setViewResolvers(resolvers);
  return resolver;
}