2014-02-17 18 views
0

我想通過使用JavaConfig(Spring MVC的4.0)如何使用JavaConfig將JSON應用於Spring MVC 4.0應用程序?

使用JSON(傑克遜庫)與我現有的應用程序我有我的配置:

@Configuration 
@EnableWebMvc 
@ComponentScan({ "my.package.controller" }) 
public class WebConfiguration extends WebMvcConfigurerAdapter { 
    @Bean(name = "viewResolver") 
    public InternalResourceViewResolver viewResolver() { 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setPrefix("/WEB-INF/pages/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 
} 

我想申請JSON配置,但我不知道找到解決方案。

我想我必須擴展WebMvcConfigurerAdapter。另一個細節,我使用Spring Security。

你能幫我嗎?

感謝

+0

你試過org.springframework.web.servlet.view.json.MappingJacksonJsonView或org.springframework.web.servlet.view.json.MappingJackson2JsonView – Koitoer

+0

我不明白如何實現它。我認爲我必須通過ViewResolver contentNegotiatingViewResolver替換InternalResourceViewResolver viewResolver(),但是我不明白如何添加JsonView。 –

回答

3

試試這個:

@Bean 
    public ViewResolver contentNegotiatingViewResolver( 
        ContentNegotiationManager manager) { 

      List<ViewResolver> resolvers = new ArrayList<ViewResolver>(); 

      InternalResourceViewResolver r1 = new InternalResourceViewResolver(); 
      r1.setPrefix("/WEB-INF/pages/"); 
      r1.setSuffix(".jsp"); 
      r1.setViewClass(JstlView.class); 
      resolvers.add(r1); 

      JsonViewResolver r2 = new JsonViewResolver(); 
      resolvers.add(r2); 

      ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); 
      resolver.setViewResolvers(resolvers); 
      resolver.setContentNegotiationManager(manager); 
    return resolver; 

    } 

,並添加傑克遜的支持應該使用MappingJacksonJsonView或MappingJackson2JsonView

public class JsonViewResolver implements ViewResolver { 
     public View resolveViewName(String viewName, Locale locale) throws Exception { 
       MappingJacksonJsonView view = new MappingJacksonJsonView(); 
       view.setPrettyPrint(true); 
       return view; 
     } 
} 

application.xml中只是爲了澄清我的例子有這個配置

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
     <property name="order" value="1" /> 
     <property name="mediaTypes"> 
     <map> 
      <entry key="json" value="application/json" /> 
      <entry key="xml" value="application/xml" /> 
     </map> 
     </property> 

因此,可能需要將mediaTypes添加到@Bean方法中的ContentNegotiatingViewResolver。

檢查this更多有關ContentNegotiation

+0

非常感謝。我嘗試了發現的源代碼,但我可能錯過了一些東西。非常感謝 –

+0

鏈接到解釋是最有價值的東西:) –

+0

它的MappingJackson2JsonView,而不是MappingJacksonJsonView :) – Tacsiazuma

相關問題