gpt4 book ai didi

java - 在 Spring MVC 4 + jackson 2.5 中使用 @JsonView

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:00 24 4
gpt4 key购买 nike

我将使用 Spring MVC 4.0.4、Hibernate 4.3.5 和 Jackson 2.5.4 开发 JSON REST 服务。对于 Controller ,我需要 @JsonView过滤属性。

我用 @JsonView(View.Summary.class) 注释了模型的一些属性和 @JsonView(View.Details.class) .当我注释 Controller 以过滤其结果时(使用 @JsonView(View.Summary.class) ),它返回所有带注释的属性而不考虑传递的 View 类( View.Summary.class )。

查看类(class):

public class View {
public static interface Summary{}
public static interface Details extends Summary{}
}

模型 :
@Entity
@Table(name="image")
public class Image {

@JsonView(View.Summary.class)
private int id;
private String thumbnailURL;

@JsonView(View.Details.class)
private String imageURL;
private Date registrationDate;
private int price;

//..... getters and setters
}

Controller :
@JsonView(View.Summary.class)
@RequestMapping(method = RequestMethod.GET, value = "/service/images")
public List<Image> getAllImages(HttpServletResponse response) {
List<Image> list;
// codes for fetching the result
return list;
}

Spring消息转换器:
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.digimind.utils.HibernateAwareObjectMapper">
</bean>
</property>
</bean>
</mvc:message-converters>

HibenrateAwareObjectMapper:
public class HibernateAwareObjectMapper extends ObjectMapper {

public HibernateAwareObjectMapper() {

Hibernate4Module hm = new Hibernate4Module();
registerModule(hm);
this.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
this.disable(MapperFeature.AUTO_DETECT_GETTERS);

}
}

结果:
    [
{
"id": 3,
"imageURL": "url3"
},
{
"id": 2,
"imageURL": "url 2"
}
]

预期结果:
    [
{
"id": 3,
},
{
"id": 2,
}
]

感谢您的关注。

最佳答案

我认为您的继承权向后更改。您在 Controller 上的注释要求使用 View.Summary.class 注释的所有内容。字段 imageUrl 使用 @JsonView(View.Details.class) 进行注释。鉴于 View.Details 扩展了 View.Summary,任何 View.Details 类型的对象都与 View.Summary 具有 is-a 关系,因此它是从您的 RestController 返回的。我相信您需要像这样定义 View :

public class View {
public static interface Details {}
public static interface Summary extends Details {}
}

现在,摘要字段是-一个详细字段,但一个详细字段不是-摘要字段。

关于java - 在 Spring MVC 4 + jackson 2.5 中使用 @JsonView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31876326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com