jackson.databind.ObjectMapper upperCasing json Имена массивов и объектов - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь использовать JMSTemplate для публикации сообщения JSON в теме. Этот код уже существовал в одном приложении, и я просто копировал его в другое, поскольку мы пытаемся объединить два приложения в одно. Я обнаружил, что код теперь отправляет сообщения JSON с первой заглавной буквой для имен полей JSONArray и JSONObject.

Я использовал шаблон JMS с конвертером сообщений, который принимает преобразователь объектов для преобразования из POJO в JSON. Единственная реальная разница в моем новом коде заключается в том, что я использую более новую версию весенней загрузки. Я знаю, что это обновит все зависимости Джексона, так что, возможно, именно поэтому произошло это изменение. В итоге я попытался установить стратегию именования на моем объектном картографе, но, похоже, это не сработало. Первоначально я делал это в своем определении бина, но для того, чтобы увидеть, работает ли он на самом деле, я попробовал это до того, как сделал convertAndSend, и это не сработало. Я все еще получал имена объектов и массивов в верхнем регистре.

public void sendMessage(Object responseToSend) {

    objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);// does not seem to make a difference
    try {
        System.out.println(objectMapper.writeValueAsString(responseToSend));//prints array and object names with the first letter capitolized
    } catch (JsonProcessingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    jmsTemplatePublish.convertAndSend("REDACTED",
            responseToSend);
}

Так, например, мое новое приложение отправляет что-то вроде.

"Quote":[{"QuoteInformation":{"Inputs":{"exampleField":false,"ExampleWritten":{"dwelling":true}}

куда раньше это было

"quote":[{"quoteInformation":{"inputs":{"exampleField":false,"exampleWritten":{"dwelling":true}}

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Этот боб был виновником. Пришлось удалить .modulesToInstall (JaxbAnnotationModule.class);

@SuppressWarnings("unchecked")
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
    return Jackson2ObjectMapperBuilder.json()
            .serializationInclusion(JsonInclude.Include.NON_EMPTY)
            .defaultViewInclusion(true)
            .modulesToInstall(JaxbAnnotationModule.class);
}
0 голосов
/ 07 октября 2019

@ Kachopsticks пытались это сделать PropertyNamingStrategy.LOWER_CASE в конфигурациях objectMapper namingStrategy вместо использования PropertyNamingStrategy.LOWER_CAMEL_CASE .

...