Java ObjectMapper:如何在snake案例中获取根元素

Java ObjectMapper:如何在snake案例中获取根元素,java,jackson2,jackson-databind,Java,Jackson2,Jackson Databind,我正在尝试读取对象并将其转换为字符串。但是根元素正在从payment\u token更改为PaymentToken ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(Include.NON_NULL); mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); mapper.setPropertyNamingStrategy(Pro

我正在尝试读取对象并将其转换为字符串。但是根元素正在从
payment\u 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"
    }
}

请帮助我获取输入中的根对象?

您可以按如下方式使用

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

如果您添加了上述注释,让我们看看它是如何工作的
将以下配置添加到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)
{“字符串”:“{”支付令牌\“:{”客户id \“:\”测试\“,\”货币代码\“:\”美元\“}}”


如上所述,objectMapper可以正确地反序列化和序列化。

我没有访问此类的权限,是否有任何映射器配置?不需要任何配置,您使用的是哪个Jackson版本?添加
com.fasterxml.jackson.core:jackson-core:2.4.x
作为依赖项,版本应>=2.4.0,我使用的是2.9.8版本,我使用的是
2.9.6
版本。不确定它为什么返回根元素
PaymentToken
。我不能在pojo中使用注释,因为我没有这个类。你的意思是你不想让“PaymentToken”键进入字符串,只想
{“client\u id”:“test”,“currency\u code”:“USD”}
?我的问题是
帮助我获取根对象,因为它在输入中
你的JSON被破坏了。此外,paymentToken也不清楚。您可以添加如何构造paymentToken,以及它是否也具有DTO类共享。