সাহায্যে @JsonView আমরা ধারাবাহিকভাবে করতে মডেল ক্লাস ক্ষেত্র যা ন্যূনতম মানদণ্ড সন্তুষ্ট (আমরা মানদণ্ড নির্ধারণ করতে আছে) সিদ্ধান্ত নিতে পারেন মত আমরা 10 properties সহযোগে এক কোটি বর্গ থাকতে পারে কিন্তু মাত্র 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;
...
..
}
এখন আমাদের কেবল কাস্টম জসন রূপান্তরকারীটি বসন্ত থেকে কেবল এইচটিটিপিমেসেজ কনভার্টারের ক্লাসকে বাড়িয়ে লিখে লিখতে হবে:
public class CustomJacksonConverter implements HttpMessageConverter<Object>
{
public CustomJacksonConverter()
{
super();
this.delegate.getObjectMapper().configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
this.delegate.getObjectMapper().setSerializationInclusion(Include.NON_NULL);
}
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<MediaType> 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
{
this.delegate.getObjectMapper().setConfig(this.delegate.getObjectMapper().getSerializationConfig().withView( null ));
}
delegate.write(obj, contentType, outputMessage);
}
}
}
এখন এই প্রথাটি-সার্লেটলেট.এক্সএমএল-এ রেখে কাস্টম জসন রূপান্তরটি ব্যবহার করার জন্য বসন্তকে বলা দরকার
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean id="jsonConverter" class="com.mactores.org.CustomJacksonConverter" >
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
এভাবেই আপনি কোন ক্ষেত্রটি সিরিয়ালযুক্ত করতে পারবেন তা স্থির করতে পারবেন।