ObjectMapper: как получить корневой элемент в случае змеи - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь прочитать объект и преобразовать в строку.Но корневой элемент меняется с payment_token на PaymentToken.

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
String requestString = mapper.writeValueAsString(paymentToken); //paymenttoken is valid object

Входной объект:

{
    "payment_token": {
        "client_id": "test",
        "currency_code": "USD" 
    }
}

Получение вывода как:

{
    "PaymentToken": {
        "client_id": "test",
        "currency_code": "USD"
    }
}

Помогите мне получить корневой объект, как он есть на входе?

1 Ответ

0 голосов
/ 25 декабря 2018

Вы можете использовать следующее

import com.fasterxml.jackson.annotation.JsonRootName;
@JsonRootName(value = "payment_token")
public class PaymentToken {
...
}

Ссылка: JsonRootName

Если вы добавите аннотацию выше, давайте посмотрим, как она работает
Добавить следующую конфигурацию вObjectMapper

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.SerializationFeature;

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); // additional to your config
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
String paymentToken = "{\"payment_token\":{\"client_id\":\"test\",\"currency_code\":\"USD\"}}";

System.out.println(mapper.readValue(paymentToken, PaymentToken.class));
System.out.println(mapper.writeValueAsString(paymentToken));

вывод:

PaymentToken (clientId = test, currencyCode = USD)
{"String": "{\" payment_token \ ": {\"client_id \ ": \" test \ ", \" currency_code \ ": \" USD \ "}}"}

Как вы можете видеть выше, objectMapper правильно десериализуется и сериализуется.

...