चूंकि WebMvcConfigurerAdapter को स्प्रिंग 5.0 के रूप में बहिष्कृत किया गया है, मैंने इसे WebMvcConfigurationSupport में बदल दिया है, लेकिन मुझे प्रतिक्रिया में शून्य मान मिलते हैं।

{
"key": null,
"value": null,
"name":"test"
}

अगर मैं इसे वापस WebMvcConfigurerAdapter में बदलता हूं, तो मुझे अपेक्षित प्रतिक्रिया मिलती है:

{
"name":"test"
}

स्प्रिंग संस्करण: 5.7.0 जैक्सन संस्करण: 2.9.7

मैंने बहुत सी चीजों को गुगल किया है लेकिन अभी भी कोई भाग्य नहीं है। मैं बहिष्कृत वर्ग का उपयोग नहीं करना चाहता। WebMvcConfigurationSupport जोड़ने के बाद @EnableWebMvc एनोटेशन को हटाने का प्रयास किया क्योंकि इसकी आवश्यकता नहीं है।

मैंने configMessageConverters को ओवरराइड कर दिया है जहां मैं मैपिंगजैक्सन2HttpMessageConverter को शामिल किए जाने के साथ सेटअप करता हूं NOT_NULL

@Configuration
@EnableAspectJAutoProxy
@EnableSwagger2
@PropertySource("classpath:test.properties")
@ComponentScan(basePackages = {"com.test.web"})
public class UmwWebConfig extends WebMvcConfigurationSupport {

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        ByteArrayHttpMessageConverter bahHumbug = new ByteArrayHttpMessageConverter();
        bahHumbug.setSupportedMediaTypes(Collections.singletonList(MediaType.parseMediaType("application/pdf")));
        converters.add(bahHumbug);

        final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        final ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.getFactory().configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        converter.setObjectMapper(objectMapper);
        converters.add(converter);
        super.configureMessageConverters(converters);
    }

प्रतिक्रिया से अशक्त क्षेत्रों को हटाना चाहते हैं। कृपया मुझे बताएं कि क्या कॉन्फ़िगरेशन में कुछ भी गलत है।

0
user1467300 4 जून 2019, 00:46

1 उत्तर

सबसे बढ़िया उत्तर

WebMvcConfigurationSupport का विस्तार न करें क्योंकि यह पदावनत WebMvcConfigurerAdapter को विस्तारित करने के बराबर नहीं है।

इसके बजाय WebMvcConfigurer को लागू करें जो कि `WebMvcConfigurerAdapter का javadoc।

बहिष्कृत। 5.0 के रूप में WebMvcConfigurer में डिफ़ॉल्ट तरीके हैं (जावा 8 बेसलाइन द्वारा संभव बनाया गया है) और इस एडेप्टर की आवश्यकता के बिना सीधे लागू किया जा सकता है

तो आपका कॉन्फ़िगरेशन क्लास हेडर कुछ इस तरह दिखना चाहिए

@Configuration
@EnableAspectJAutoProxy
@EnableSwagger2
@EnableWebMvc
@PropertySource("classpath:test.properties")
@ComponentScan(basePackages = {"com.test.web"})
public class UmwWebConfig implements WebMvcConfigurer { ... }

आपको @EnableWebMvc फिर से जोड़ने की जरूरत है (जैसा कि यह होना चाहिए और उस इंटरफ़ेस विधि को ओवरराइड/कार्यान्वयित करना चाहिए जिसका आपको उपयोग करने की आवश्यकता है। इस मामले में शायद केवल एक ही।

प्रो-टिप: ObjectMapper को बनाने के लिए Jackson2ObjectMapperBuilder का उपयोग करें और MappingJackson2HttpMessageConverter के कंस्ट्रक्टर का उपयोग करें। यह एक अतिरिक्त ObjectMapper (जो डिफ़ॉल्ट कंस्ट्रक्टर में होता है) बनाने से बचाता है।

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        ByteArrayHttpMessageConverter bahHumbug = new ByteArrayHttpMessageConverter();
        bahHumbug.setSupportedMediaTypes(Collections.singletonList(MediaType.parseMediaType("application/pdf")));
        converters.add(bahHumbug);

        final ObjectMapper objectMapper = 
          Jackson2ObjectMapperBuilder.json()
            .serializationInclusion(JsonInclude.Include.NON_NULL)
            .failOnUnknownProperties(true)
            .featuresToEnable(JsonGenerator.Feature.ESCAPE_NON_ASCII)
            .build();       

        converters.add(new MappingJackson2HttpMessageConverter(objectMapper);
        super.configureMessageConverters(converters);
    }
1
M. Deinum 4 जून 2019, 06:15