我是靠谱客的博主 俭朴冰棍,最近开发中收集的这篇文章主要介绍jackson改变json值_java - Jackson JSON自定义序列化某些字段,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在@JsonView的帮助下,我们可以决定要序列化的模型类的字段满足最小标准(我们必须定义标准),就像我们可以有一个具有10个属性的核心类,但只有5个属性可以序列化,这对于客户端是必需的 只要

只需创建以下类来定义我们的视图:

public class Views

{

static class Android{};

static class IOS{};

static class Web{};

}

带注释的带注释的模型类:

public class Demo

{

public Demo()

{

}

@JsonView(Views.IOS.class)

private String iosField;

@JsonView(Views.Android.class)

private String androidField;

@JsonView(Views.Web.class)

private String webField;

// getters/setters

...

..

}

现在我们必须通过简单地从spring扩展HttpMessageConverter类来编写自定义json转换器:

public class CustomJacksonConverter implements HttpMessageConverter

{

public CustomJacksonConverter()

{

super();

//this.delegate.getObjectMapper().setConfig(this.delegate.getObjectMapper().getSerializationConfig().withView(Views.ClientView.class));

this.delegate.getObjectMapper().configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);

this.delegate.getObjectMapper().setSerializationInclusion(Include.NON_NULL);

}

// a real message converter that will respond to methods and do the actual work

private MappingJackson2HttpMessageConverter delegate = new MappingJackson2HttpMessageConverter();

@Override

public boolean canRead(Class> clazz, MediaType mediaType) {

return delegate.canRead(clazz, mediaType);

}

@Override

public boolean canWrite(Class> clazz, MediaType mediaType) {

return delegate.canWrite(clazz, mediaType);

}

@Override

public List getSupportedMediaTypes() {

return delegate.getSupportedMediaTypes();

}

@Override

public Object read(Class extends Object> clazz,

HttpInputMessage inputMessage) throws IOException,

HttpMessageNotReadableException {

return delegate.read(clazz, inputMessage);

}

@Override

public void write(Object obj, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException

{

synchronized(this)

{

String userAgent = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("userAgent");

if ( userAgent != null )

{

switch (userAgent)

{

case "IOS" :

this.delegate.getObjectMapper().setConfig(this.delegate.getObjectMapper().getSerializationConfig().withView(Views.IOS.class));

break;

case "Android" :

this.delegate.getObjectMapper().setConfig(this.delegate.getObjectMapper().getSerializationConfig().withView(Views.Android.class));

break;

case "Web" :

this.delegate.getObjectMapper().setConfig(this.delegate.getObjectMapper().getSerializationConfig().withView( Views.Web.class));

break;

default:

this.delegate.getObjectMapper().setConfig(this.delegate.getObjectMapper().getSerializationConfig().withView( null ));

break;

}

}

else

{

// reset to default view

this.delegate.getObjectMapper().setConfig(this.delegate.getObjectMapper().getSerializationConfig().withView( null ));

}

delegate.write(obj, contentType, outputMessage);

}

}

}

现在需要告诉spring使用这个自定义json转换,只需将它放在dispatcher-servlet.xml中即可

这就是你如何决定序列化哪些字段的方法。

最后

以上就是俭朴冰棍为你收集整理的jackson改变json值_java - Jackson JSON自定义序列化某些字段的全部内容,希望文章能够帮你解决jackson改变json值_java - Jackson JSON自定义序列化某些字段所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部