2014-08-30 29 views
0

能否請你幫我正確配置傑克遜混淆與Spring MVC的註解定製JSON響應。無法配置混合傑克遜在

這是我現在有:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter"/> 
     </list> 
    </property> 
</bean> 
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> 

我不知道如何配置它的2類映射...:addMixInAnnotations(User.class, UserMixIn.class);

回答

2

DD的混入配置爲ObjectMapper一旦被初始化在Controller構造:

@Controller 
public class MyController { 

    private ObjectMapper objectMapper = new ObjectMapper(); 

    public MyController(ObjectMapper objectMapper) { 
     this.objectMapper = objectMapper; 
     objectMapper.addMixInAnnotations(User.class, UserMixIn.class); 
    } 

    @RequestMapping("/some-path") 
    @ResponseBody 
    public String someMethod() { 
     List<User> users = new ArrayList<User>(); // Mock List to hold your Users 
     users.add(new User()); // Keep adding some users 
     return objectMapper.writeValueAsString(users, new TypeReference<List<User>>() {}); 
    } 
} 

並檢查了輸出:)

2

如果您只需要爲單個控制器配置Mixin,那麼@tmarwen給出的解決方案就可以很好地工作。

但是如果你想要使用的mixin thoughout您需要實現類似如下的方法所有的Spring控制器:

更改XML配置:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter"/> 
     </list> 
    </property> 
</bean> 
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    <property name="objectMapper" ref="mapper"/> 
</bean> 

接下來,您需要配置mapper在上面的XML中引用的bean。使用SpEL和FactoryBean可以很容易地在XML中實現這一點,但是當您在Java Config中有一個優秀且超級易用的替代方案時,沒有理由這麼做。

@Configuration 
public class JacksonConfig { 

    @Bean 
    public ObjectMapper mapper() { 
     final ObjectMapper mapper = new ObjectMapper(); 
     mapper.addMixInAnnotations(User.class, UserMixIn.class); 
     return mapper; 
    } 
} 

被上面發生的變化,你需要絕對沒有參照你的控制器ObjectMapper,並可以使用Spring MVC的JSON功能,就像你現在使用它們。

+1

總是可以在XML中使用'FactoryBean'。 – 2014-08-30 18:21:10

+0

@SotiriosDelimanolis一如既往地出現!但是你也需要掌握'''''這會讓事情變得複雜一點。這就是爲什麼剛剛使用Java Config。在我看來,在大多數情況下它更直觀 – geoand 2014-08-30 18:32:24