【发布时间】:2021-06-07 09:05:34
【问题描述】:
我正在尝试将 JSON 对象转换为 POJO 类, 但有些值以空值结束,而 其他设置为 JSON 中的值。 回应是
{
"intention_id": 12936,
"intention_datetime": "2021-03-09T09:58:16-03:00",
"status": "created",
"cuit": "20-314559999-9",
"branch": "Avellaneda 13",
"checkout": "8",
"terminal_number": "87980012",
"intention_type": "payment",
"original_amount": 1200.0,
"currency": "ARS",
"payment_methods_data": [
{
"payment_method_id": 1,
"establishment_id": "29880765",
"trace_number": 1090,
"ticket_number": 131,
"installments": [
{
"quantity": 1,
"total_amount": 1200.0,
"amount_per_installment": 200.0,
"cft": 12.56,
"tna": 14.87
},
{
"bank_id": 28,
"quantity": 6,
"total_amount": 1200.0,
"amount_per_installment": 200.0,
"cft": 12.56,
"tna": 14.87
},
{
"quantity": 6,
"total_amount": 1400.0,
"amount_per_installment": 233.33,
"cft": 12.56,
"tna": 14.87
}
]
},
{
"payment_method_id": 15,
"establishment_id": "69880548",
"trace_number": 2034,
"ticket_number": 673,
"installments": [
{
"quantity": 1,
"total_amount": 1200.0,
"amount_per_installment": 200.0,
"cft": 12.56,
"tna": 14.87
},
{
"bank_id": 28,
"quantity": 6,
"total_amount": 1200.0,
"amount_per_installment": 200.0,
"cft": 12.56,
"tna": 14.87
},
{
"quantity": 6,
"total_amount": 1400.0,
"amount_per_installment": 233.33,
"cft": 12.56,
"tna": 14.87
}
]
}
],
"integrator_intention_id": "587cba61-ff27-46c6-ba8b-fd936665c35f",
"integrator": "alsea"
}
我忽略了数组元素, 所以我的对象等级是
public class ObjectResponseBimo {
public int intention_id;
public String intention_datetime;
public String status;
public String cuit;
public String branch;
public String checkout;
public String terminal_number;
public String intention_type;
public double original_amount;
public String currency;
public String integrator_intention_id;
public String integrator;
public int getIntention_id() {
return intention_id;
}
@JsonProperty("intention_id")
public void setIntention_id(int intention_id) {
this.intention_id = intention_id;
}
public String getIntention_datetime() {
return intention_datetime;
}
@JsonProperty("intention_datetime")
public void setIntention_datetime(String intention_datetime) {
this.intention_datetime = intention_datetime;
}
public String getStatus() {
return status;
}
@JsonProperty("status")
public void setStatus(String status) {
this.status = status;
}
public String getCuit() {
return cuit;
}
@JsonProperty("cuit")
public void setCuit(String cuit) {
this.cuit = cuit;
}
public String getBranch() {
return branch;
}
@JsonProperty("branch")
public void setBranch(String branch) {
this.branch = branch;
}
public String getCheckout() {
return checkout;
}
@JsonProperty("checkout")
public void setCheckout(String checkout) {
this.checkout = checkout;
}
public String getTerminal_number() {
return terminal_number;
}
@JsonProperty("terminal_number")
public void setTerminal_number(String terminal_number) {
this.terminal_number = terminal_number;
}
public String getIntention_type() {
return intention_type;
}
@JsonProperty("intention_type")
public void setIntention_type(String intention_type) {
this.intention_type = intention_type;
}
public double getOriginal_amount() {
return original_amount;
}
@JsonProperty("original_amount")
public void setOriginal_amount(double original_amount) {
this.original_amount = original_amount;
}
public String getCurrency() {
return currency;
}
@JsonProperty("currency")
public void setCurrency(String currency) {
this.currency = currency;
}
public String getIntegrator_intention_id() {
return integrator_intention_id;
}
@JsonProperty("integrator_intention_id")
public void setIntegrator_intention_id(String integrator_intention_id) {
this.integrator_intention_id = integrator_intention_id;
}
public String getIntegrator() {
return integrator;
}
@JsonProperty("integrator")
public void setIntegrator(String integrator) {
this.integrator = integrator;
}
@Override
public String toString() {
return "ObjectResponseBimo [intention_id=" + intention_id + ", intention_datetime=" + intention_datetime
+ ", status=" + status + ", cuit=" + cuit + ", branch=" + branch + ", checkout=" + checkout
+ ", terminal_number=" + terminal_number + ", intention_type=" + intention_type + ", original_amount="
+ original_amount + ", currency=" + currency + ", integrator_intention_id=" + integrator_intention_id
+ ", integrator=" + integrator + "]";
}}
所有其他的getter和setter, 每个人的 set 方法中都有 JsonProperty
我正在与杰克逊合作, 所以我用
发送对象ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
ObjectResponseBimo o = objectMapper.readValue(jsonToPost, ObjectResponseBimo.class);
return objectMapper.toString() + "\n" + o.toString();
输出是:
ObjectResponseBimo [intention_id=0,intention_datetime=null, 状态=null,cuit=20-314559999-9,分支=Avellaneda 13,结帐=8, 终端号码=87980012,意图类型=付款, original_amount=1200.0,货币=ARS, integrator_intention_id=587cba61-ff27-46c6-ba8b-fd936665c35f, 积分器=空]
【问题讨论】:
-
能否请您发布完整的实体类 ObjecrResponseBimo。还可以尝试使用 getter 获取各个属性值并检查 toString 方法。
-
@Ironluca 我已经编辑了帖子
-
您遇到的问题不是由您包含的任何代码引起的。我拿了你的代码和你的示例 JSON,它解析正确。
-
@ClaudioScabbiaSepúlveda,在 2.7 中,它解析得很好,正如 DwB 提到的那样。你用的是哪个版本的杰克逊? JsonAutoDetect 是 2.x 的注解,你用的是 1.x 吗?