2015-09-10 2 views
1

Есть ли способ, как я могу объявить @JsonView для всего контроллера Spring MVC для отдыха?@ Декларация JsonView для всей системы управления весной 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

Можете ли вы рассказать мне, как я могу использовать Mapper для решения этой проблемы? Вы можете порекомендовать мне полезную ссылку? Благодаря! –

ответ

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

Смежные вопросы