2015-09-10 35 views
1

有什麼方法可以爲整個Spring MVC休息控制器聲明@JsonView@JsonView聲明整個Spring MVC休息控制器

我知道我可以像這種特殊的方法聲明@JsonView

@RequestMapping(value = "/user", method = RequestMethod.G 
@JsonView(User.WithoutPasswordView.class) 
public User getUser() { 
     return new User("eric", "7!jd#h23"); 
} 

但我不想定義@JsonView每方法,因爲我的方法是在晚飯類中定義的,我不希望覆蓋他們只是添加單個註釋。
我想聲明@JsonView爲整個控制器即是這樣的:

@RestController 
@RequestMapping(ZONES_PATH) 
@JsonView(User.WithoutPasswordView.class) 
public class ZoneResource extends GenericRestService<Zone> { 
    ... 

有一些方法可以讓我做到這一點?

+0

您解決了這個問題使用自定義對象映射?我處於同樣的情況。 :) –

+1

我已經放棄了'@ JsonView'。他們是有問題和混亂的。定義特定的傳輸對象和例如使用映射器。 –

+0

你能告訴我如何使用映射器來解決這個問題嗎?你可以推薦我一個有用的鏈接?謝謝! –

回答

1

創建使用預先定義的視圖

public class CustomObjectMapper extends ObjectMapper { 

    public CustomObjectMapper() { 
     super(); 
     setSerializationConfig(getSerializationConfig() 
       .withView(User.WithoutPasswordView.class)); 
    } 
} 

註冊爲默認對象映射器彈簧

<mvc:annotation-driven> 
    <mvc:message-converters>   
     <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
      <property name="objectMapper" ref="jacksonObjectMapper" /> 
     </bean>   
    </mvc:message-converters> 
</mvc:annotation-driven> 

<bean id="jacksonObjectMapper" class="com.web.CustomObjectMapper" /> 
+0

這是一個有趣的想法,但是它不會爲整個應用程序定義'@ JsonView'嗎?我只需要它的作用域爲特定的REST控制器。 –

+0

是的,對於整個Spring MVC控制器。你也可以像這樣'mapper.writer()。withView(User.WithoutPasswordView.class).writeValueAsString(myEntityWithView);'。註解不能被繼承,但方法可以 – MangEngkus