বসন্তে অবজেক্টম্যাপার কনফিগার করা


91

আমার লক্ষ্যটি এমনভাবে কনফিগার করা objectMapperযা এটি কেবলমাত্র উপাদানটির সাথে ধারাবাহিকভাবে বর্ণিত হয় যা দিয়ে টীকায়িত হয় @JsonProperty

এটি করার জন্য আমি এই ব্যাখ্যাটি অনুসরণ করেছিলাম যা বলে যে কীভাবে অবজেক্টম্যাপারকে কনফিগার করতে হয়।

আমি এখানে বর্ণিত হিসাবে কাস্টম অবজেক্টম্যাপার অন্তর্ভুক্ত করেছি ।

ক্লাসটি NumbersOfNewEventsসিরিয়ালযুক্ত হওয়ার পরে এটিতে জসন-এ সমস্ত বৈশিষ্ট্য রয়েছে।

কারও কি ইঙ্গিত আছে? আগাম ধন্যবাদ

জ্যাকসন 1.8.0 বসন্ত 3.0.5

কাস্টমবজেক্টম্যাপার

public class CompanyObjectMapper extends ObjectMapper {
    public CompanyObjectMapper() {
        super();
        setVisibilityChecker(getSerializationConfig()
                .getDefaultVisibilityChecker()
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
                .withFieldVisibility(JsonAutoDetect.Visibility.NONE)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.DEFAULT));
    }
}

servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <context:component-scan base-package="de.Company.backend.web" />

    <mvc:annotation-driven />

    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                    <property name="objectMapper" ref="jacksonObjectMapper" />
                </bean>
            </list>
        </property>
    </bean>

    <bean id="jacksonObjectMapper" class="de.Company.backend.web.CompanyObjectMapper" />
</beans>

নাম্বার অফ নিউ নিউজ

public class NumbersOfNewEvents implements StatusAttribute {

    public Integer newAccepts;
    public Integer openRequests;

    public NumbersOfNewEvents() {
        super();
    }
}

উত্তর:


136

স্প্রিং বুট (১.২.৪) এবং জ্যাকসন (২.৪.)) ব্যবহার করে নীচের টিকাটি ভিত্তিক কনফিগারেশনটি আমার পক্ষে কাজ করেছে।

@Configuration
public class JacksonConfiguration {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);

        return mapper;
    }
}

4
স্প্রিং অ্যাপলিকেশনগুলিতে জ্যাকসনের কয়েকটি বৈশিষ্ট্য কাস্টমাইজ করতে সহায়তা করে: ডক্টর.স্প্রিং.আইও
স্প্রিং-

10
এই যে বন্ধুরা. আমি একটি সমস্যার মুখোমুখি হয়েছি যখন আপনি জাভা কনফিগারেশনে নাম আইটেমপ্যাপারের সাথে শিম ঘোষণা করেন, যেমন এটি উদাহরণস্বরূপ দেখানো হয়েছে, এই শিমটি স্প্রিং বুট দ্বারা উপেক্ষা করা হয়, কারণ এই জাতীয় নামের শিমটি ইতিমধ্যে সিস্টেমে নিবন্ধিত রয়েছে, এমনকি আপনি place @ এটিতে প্রাথমিক টীকা। এই সমস্যাটি সমাধানের জন্য আপনাকে বিভিন্ন নামের সাথে শিম নিবন্ধন করতে হবে, যেমন jsonObjectMapper, এবং এটি \ @ প্রাথমিক টীকা
ডেমউইস

আপনি যদি স্প্রিং বুট ব্যবহার না করেন তবে দয়া করে আমার উত্তরটি দেখুন
ডারমাউজ

একটি প্রশ্ন: আপনার অবশ্যই ক্লাসের নাম রাখা উচিত JacksonConfiguration? এই ক্লাসটি জ্যাকসনের জন্য কনফিগারেশন ক্লাস হিসাবে ব্যবহার করার জন্য স্প্রিং বুটকে নির্দেশ দেওয়ার একটি স্বয়ংক্রিয় পদ্ধতি?
মার্কো সুল্লা

এটি ব্যবহার করার সময় কি সত্যিই কাজ করছে @EnableWebMvc? আমি সন্দেহ করি কারণ ... আমার উত্তরে দেখুন : @EnableWebMvc ব্যবহার কেন একটি সমস্যা?
এডিআরসিএইচ

25

এটি হতে পারে কারণ আমি স্প্রিং ৩.১ ব্যবহার করছি (আপনার প্রশ্নটি হিসাবে স্প্রিং 3.0.০.৫ এর পরিবর্তে) তবে স্টিভ ইস্টউডের উত্তর আমার পক্ষে কার্যকর হয়নি। এই সমাধানটি বসন্ত ৩.১ এর জন্য কাজ করে:

আপনার বসন্তের এক্সএমএল প্রসঙ্গে:

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

<bean id="jacksonObjectMapper" class="de.Company.backend.web.CompanyObjectMapper" />

এই স্প্রিং 3.1 সঙ্গে জ্যাকসন 2.x ব্যবহার করার জন্য সাহায্য করেছে stackoverflow.com/questions/10420040/...
অরামের Kocharyan

দরকারী! আমার কাস্টম অবজেক্টম্যাপারকে স্প্রিং ৩.০ থেকে ৩.২ পর্যন্ত আপগ্রেড করার জন্য এই পদ্ধতির অবলম্বন করতে হয়েছিল। ম্যাপিংজ্যাকসন জসনভিউ বিনের সংজ্ঞা দেওয়ার সময় পূর্বে একটি অবজেক্টম্যাপার সম্পত্তি সেট করা ছিল, কিন্তু এটি আর কাজ করে না। এটি জ্যাকসনের সাথে 1.7
ডেভিড ইজলি

20

org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBeanএকটি দীর্ঘ সময় জন্য আছে । স্প্রিং বুটের 1.2 রিলিজ থেকে শুরু করে org.springframework.http.converter.json.Jackson2ObjectMapperBuilderজাভা কনফিগারেশনের জন্য রয়েছে।

স্ট্রিং বুট কনফিগারেশন হিসাবে সহজ হতে পারে:

spring.jackson.deserialization.<feature_name>=true|false
spring.jackson.generator.<feature_name>=true|false
spring.jackson.mapper.<feature_name>=true|false
spring.jackson.parser.<feature_name>=true|false
spring.jackson.serialization.<feature_name>=true|false
spring.jackson.default-property-inclusion=always|non_null|non_absent|non_default|non_empty

মধ্যে classpath:application.propertiesবা কিছু জাভা কোড @Configurationশ্রেণী:

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
    builder.indentOutput(true).dateFormat(new SimpleDateFormat("yyyy-MM-dd"));
    return builder;
}

দেখা:


4
এটি বেশিরভাগ ব্যবহারের ক্ষেত্রে কাজ করে, তবে আপনি যদি @EnableWebMvc টিকা ব্যবহার করেন (স্প্রিং বুট ২.০.৩ এ পরীক্ষিত) তবে স্প্রিং বুট জ্যাকসন কনফিগারেশন উপেক্ষা করা হবে।
জন

4
যদিও আমি পরীক্ষা না করে নিলাম আমি নিশ্চিত যে @EnableWebMvc (স্প্রিং বুট ব্যবহার না করেও না) দিয়ে কাজ করবে না। কেন? WebMvcConfigurationSupport দেখতে (DelegatingWebMvcConfiguration প্রসারিত WebMvcConfigurationSupport): Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json()
এডিআরসিএইচ

16

আমি এটি জ্যাকসন ২.x এবং স্প্রিং ৩.১.২+ এর সাথে ব্যবহার করেছি

সার্লেট-কনটেক্সট.এক্সএমএল:

মনে রাখবেন যে মূল উপাদানটি <beans:beans>, সুতরাং আপনার সেটআপের উপর নির্ভর করে আপনাকে এই উপাদানগুলির কয়েকটি মুছতে beansএবং যুক্ত করতে হতে পারে mvc

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

    <beans:bean id="jacksonObjectMapper"
        class="au.edu.unimelb.atcom.transfer.json.mappers.JSONMapper" />

au.edu.unimelb.atcom.transfer.json.mappers.JSONMapper.java:

public class JSONMapper extends ObjectMapper {

    public JSONMapper() {
        SimpleModule module = new SimpleModule("JSONModule", new Version(2, 0, 0, null, null, null));
        module.addSerializer(Date.class, new DateSerializer());
        module.addDeserializer(Date.class, new DateDeserializer());
        // Add more here ...
        registerModule(module);
    }

}

ডেটরিশালাইজার.জাভা:

public class DateSerializer extends StdSerializer<Date> {

    public DateSerializer() {
        super(Date.class);
    }

    @Override
    public void serialize(Date date, JsonGenerator json,
            SerializerProvider provider) throws IOException,
            JsonGenerationException {
        // The client side will handle presentation, we just want it accurate
        DateFormat df = StdDateFormat.getBlueprintISO8601Format();
        String out = df.format(date);
        json.writeString(out);
    }

}

ডেটডিজারিলাইজার.জভা:

public class DateDeserializer extends StdDeserializer<Date> {

    public DateDeserializer() {
        super(Date.class);
    }

    @Override
    public Date deserialize(JsonParser json, DeserializationContext context)
            throws IOException, JsonProcessingException {
        try {
            DateFormat df = StdDateFormat.getBlueprintISO8601Format();
            return df.parse(json.getText());
        } catch (ParseException e) {
            return null;
        }
    }

}

10

Https://github.com/FasterXML/jackson-module-hibernate এর ভিত্তিতে আমি এখন সমাধানটি পেয়েছি

আমি অবজেক্ট ম্যাপারকে প্রসারিত করেছি এবং উত্তরাধিকারসূত্রে প্রাপ্ত কন্সট্রাক্টরগুলিতে বৈশিষ্ট্যগুলি যুক্ত করেছি।

তারপরে নতুন অবজেক্ট ম্যাপারটি শিম হিসাবে নিবন্ধিত হয়েছে।

<!-- https://github.com/FasterXML/jackson-module-hibernate -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <array>
            <bean id="jsonConverter"
            class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="objectMapper">
                    <bean class="de.company.backend.spring.PtxObjectMapper"/>
                </property>
            </bean>
        </array>
    </property>
</bean>   

সমাধানের জন্য আপনাকে অনেক ধন্যবাদ! আমি << টিকেট -চালক> চারপাশে খনন করে চার ঘন্টা ব্যয় করেছি , এটি কেবল রূপান্তরকারীদের পছন্দ করে নি। আপনার উত্তর চেষ্টা করে দেখুন, শেষ পর্যন্ত এটি কার্যকর হয়!
তুষারপাত

4
টীকা ব্যবহার করতে, আপনাকে শুধু আপনার কাস্টম ম্যাপার যে প্রসারিত টীকা পারে ObjectMapperযেমন @Componentএবং @Primary। এটিই স্প্রিং রেফারেন্স গাইডে প্রস্তাবিত পদ্ধতি এবং এটি আমার পক্ষে ভাল কাজ করেছে।
ওলগা ম্যাসিয়াসেজেক

9

আপনি যদি কাস্টম সিরিয়ালাইজার নিবন্ধকরণের জন্য কাস্টম অবজেক্টম্যাপার যুক্ত করতে চান তবে আমার উত্তরটি চেষ্টা করুন।

আমার ক্ষেত্রে (স্প্রিং 3.2.4 এবং জ্যাকসন 2.3.1), কাস্টম সিরিয়ালাইজারের জন্য এক্সএমএল কনফিগারেশন:

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="false">
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                    <property name="serializers">
                        <array>
                            <bean class="com.example.business.serializer.json.CustomObjectSerializer"/>
                        </array>
                    </property>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

অব্যক্ত পদ্ধতিতে কোনও কিছুর দ্বারা আবার ডিফল্টে ওভাররাইট করা হয়েছিল।

এটি আমার পক্ষে কাজ করেছে:

কাস্টমবজেক্ট.জভা

@JsonSerialize(using = CustomObjectSerializer.class)
public class CustomObject {

    private Long value;

    public Long getValue() {
        return value;
    }

    public void setValue(Long value) {
        this.value = value;
    }
}

কাস্টমবজেক্টসরিয়ালাইজার.জভা

public class CustomObjectSerializer extends JsonSerializer<CustomObject> {

    @Override
    public void serialize(CustomObject value, JsonGenerator jgen,
        SerializerProvider provider) throws IOException,JsonProcessingException {
        jgen.writeStartObject();
        jgen.writeNumberField("y", value.getValue());
        jgen.writeEndObject();
    }

    @Override
    public Class<CustomObject> handledType() {
        return CustomObject.class;
    }
}

<mvc:message-converters>(...)</mvc:message-converters>আমার সমাধানে কোনও এক্সএমএল কনফিগারেশন ( ) দরকার নেই।


6

আমি স্প্রিং 4.1.6 এবং জ্যাকসন ফাস্টারএক্সএমএল 2.1.4 ব্যবহার করছি।

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <!-- 设置不输出null字段-->
                        <property name="serializationInclusion" value="NON_NULL"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

এটি আমার অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএল কনফিগারেশনে কাজ করে


6

সমাধান 1

প্রথম কার্যক্ষম সমাধান (পরীক্ষিত) দরকারী বিশেষত @EnableWebMvc ব্যবহার করার সময়:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private ObjectMapper objectMapper;// created elsewhere
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // this won't add a 2nd MappingJackson2HttpMessageConverter 
        // as the SOLUTION 2 is doing but also might seem complicated
        converters.stream().filter(c -> c instanceof MappingJackson2HttpMessageConverter).forEach(c -> {
            // check default included objectMapper._registeredModuleTypes,
            // e.g. Jdk8Module, JavaTimeModule when creating the ObjectMapper
            // without Jackson2ObjectMapperBuilder
            ((MappingJackson2HttpMessageConverter) c).setObjectMapper(this.objectMapper);
        });
    }

সমাধান 2

অবশ্যই নীচের সাধারণ পদ্ধতির খুব বেশি কাজ করে (এছাড়াও @EableWebMvc এর সাথে কাজ করা):

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private ObjectMapper objectMapper;// created elsewhere
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // this will add a 2nd MappingJackson2HttpMessageConverter 
        // (additional to the default one) but will work and you 
        // won't lose the default converters as you'll do when overwriting
        // configureMessageConverters(List<HttpMessageConverter<?>> converters)
        // 
        // you still have to check default included
        // objectMapper._registeredModuleTypes, e.g.
        // Jdk8Module, JavaTimeModule when creating the ObjectMapper
        // without Jackson2ObjectMapperBuilder
        converters.add(new MappingJackson2HttpMessageConverter(this.objectMapper));
    }

@EableWebMvc ব্যবহার কেন সমস্যা?

@EableWebMvc ব্যবহার করছে DelegatingWebMvcConfigurationযা প্রসারিত করে যা এটি করে WebMvcConfigurationSupport:

if (jackson2Present) {
    Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json();
    if (this.applicationContext != null) {
        builder.applicationContext(this.applicationContext);
    }
    messageConverters.add(new MappingJackson2HttpMessageConverter(builder.build()));
}

যার অর্থ হ'ল @EableWebMvc ব্যবহার করার সময় ObjectMapperএটি ডিফল্ট তৈরির জন্য ব্যবহার করার জন্য তৈরি করার উদ্দেশ্যে আপনার নিজের ইনজেকশন দেওয়ার কোনও উপায় নেই MappingJackson2HttpMessageConverter


দুর্দান্ত! প্রকৃতপক্ষে রিপোজিটরিআরস্টএমভিসি কনফিগারেশন, স্প্রিং-ডেটা-বাকী-ওয়েবএমভিসি-র অংশ: ৩.২.৩ স্প্রিং-এর তৈরি অজেক্টম্যাপার ব্যবহার করে না এবং মডিউলের সাথে কেবল কাস্টম অবজেক্টম্যাপার বাক্সের বাইরে কাজ করে না। প্রথম পদ্ধতির আসল এবং বসন্ত-ডেটা-বাকী-ওয়েবএমভিসি দ্বারা কাস্টমাইজ করা অবজেক্টম্যাপারকে প্রতিস্থাপন করুন। ধন্যবাদ!
ভালটনী বোয়াভেন্তুরা

আমার একটি সমস্যা ছিল যেখানে আমি আমার অবজেক্টম্যাপারটিকে কাস্টমাইজ করতে পারি না যা সক্ষম উইলবিএমভিসি এর দু: খিত / সি ছিল। খুব খুশী আমি এই জুড়ে হোঁচট খেয়েছি।
ইভান হোয়াইট

3

স্প্রিং বুটে 2.2.xআপনার এটি এটির মতো কনফিগার করতে হবে:

@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
    return builder.build()
}

কোটলিন:

@Bean
fun objectMapper(builder: Jackson2ObjectMapperBuilder) = builder.build()

2

স্প্রিং 4 এর উপরে, MappingJacksonHttpMessageConverterযদি আপনি কেবল কনফিগার করতে চান তবে কনফিগার করার দরকার নেই ObjectMapper

(কনফিগার MappingJacksonHttpMessageConverterকরার ফলে আপনি অন্যান্য ম্যাসেজকভার্টারটি হারাতে পারবেন)

আপনার কেবল এটি করা দরকার:

public class MyObjectMapper extends ObjectMapper {

    private static final long serialVersionUID = 4219938065516862637L;

    public MyObjectMapper() {
        super();
        enable(SerializationFeature.INDENT_OUTPUT);
    }       
}

এবং আপনার বসন্ত কনফিগারেশনে, এই শিমটি তৈরি করুন:

@Bean 
public MyObjectMapper myObjectMapper() {        
    return new MyObjectMapper();
}

কাজ করে না - - কাস্টমঅবজেক্টম্যাপার: ক্লাস পাথ রিসোর্সে 'কাস্টমবজেক্টম্যাপার' দ্বারা সংজ্ঞায়িত [com / config.class] -_halObjectMapper: defined in null
আংগশুমান আগরওয়াল

4
এবং এটি কেবল স্প্রিং বুট দিয়ে কাজ করবে। সাধারণ স্প্রিং ওয়েব নয়।
ডর্মাউস

2

প্লেইন স্প্রিং-ওয়েবে একটি বার্তা রূপান্তরকারী কনফিগার করতে, জাভা 8 জেএসআর -310 জাভাটাইমমডুল সক্ষম করার জন্য আপনাকে প্রথমে WebMvcConfigurerআপনার @Configurationক্লাসে প্রয়োগ করতে হবে এবং তারপরে configureMessageConvertersপদ্ধতিটি ওভাররাইড করতে হবে :

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(new JavaTimeModule(), new Jdk8Module()).build()
            .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    converters.add(new MappingJackson2HttpMessageConverter(objectMapper));
}

এটির মতো আপনি ObjectMapperজাভা ভিত্তিক স্প্রিং কনফিগারেশনে সংজ্ঞায়িত যে কোনও কাস্টম নিবন্ধভুক্ত করতে পারেন ।


আমি স্প্রিং বুটের মাধ্যমে অবজেক্টম্যাপারটি ইনজেকশন এবং কনফিগার করা পছন্দ করব।
কনস্টান্টিনো ক্রোনম্বার্গার

4
অবশ্যই, যদি আপনি স্প্রিং বুট ব্যবহার করেন। এটি একটি স্প্রিং বুটের প্রশ্ন ছিল না।
ডরমোস

হ্যাঁ, আকর্ষণীয়ভাবে লক্ষ্য করা যায় যে স্প্রিং বুটের সাথে স্প্রিং ওয়েব ব্যবহার করার সময় এটি স্প্রিং বুটের দ্বারা সরবরাহ করা অবজেক্টম্যাপার ব্যবহার করে না এবং সে কারণেই আমি এই প্রশ্নটিতে শেষ হয়েছি যা আমাকে সহায়তা করেছিল।
কনস্টান্টিনো ক্রোনম্বার্গার

এটি সমস্ত ডিফল্ট বার্তা রূপান্তরকারী সাফ করবে! আমি নিশ্চিত যে কেউ এটি চায় না। সমাধানের জন্য আমার উত্তর দেখুন ।
এড্রিএইচসি

ওয়েল যদি আপনি বার্তা কনভার্টার প্রসারিত করতে চান চাই সঠিক সমাধান ওভাররাইড করতে হবে extendMessageConvertersঅনুযায়ী, বসন্ত ডকুমেন্টেশন । তবে আমার এটির কোনও প্রয়োজন নেই, কারণ আমার কেবলমাত্র একটি কাস্টমাইজড প্রয়োজন MappingJackson2HttpMessageConverter
ডর্মাউস

1

আমি স্প্রিংয়ের ৩.২.৪ এবং জ্যাকসন ফাস্টারএক্সএমএল ২.১.১ ব্যবহার করছি।

আমি একটি কাস্টম জ্যাকসনঅজেক্টম্যাপার তৈরি করেছি যা ম্যাপযুক্ত অবজেক্টগুলির প্রতিটি বৈশিষ্ট্যের জন্য সুস্পষ্ট টীকাগুলির সাথে কাজ করে:

package com.test;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

public class MyJaxbJacksonObjectMapper extends ObjectMapper {

public MyJaxbJacksonObjectMapper() {

    this.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
            .setVisibility(PropertyAccessor.CREATOR, JsonAutoDetect.Visibility.ANY)
            .setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE)
            .setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE)
            .setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);

    this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    }
}

তারপরে এটি প্রাসঙ্গিক-কনফিগারেশনে ( সার্লেট- কনটেক্সট.এক্সএমএল) ইনস্ট্যান্ট করা হয় :

<mvc:annotation-driven>
    <mvc:message-converters>

        <beans:bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <beans:property name="objectMapper">
                <beans:bean class="com.test.MyJaxbJacksonObjectMapper" />
            </beans:property>
        </beans:bean>

    </mvc:message-converters>
</mvc:annotation-driven>

এটি কাজ করে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.