POJO类:
public class Transaction implements Serializable {
@Id
@GeneratedValue
private Long id;
private String userName;
private String apiKey;
private int amount;
private String accountNumber;
private String expirationDate;
private String cscCode;
private String customerAccountCode;
private String firstName;
private String lastName;
private String street;
private String city;
private String state;
private String zipCode;
private String phoneNumber;
private String description;
private String responseCode;
private String responseMessage;
private String authCode;
private String avsResultCode;
private String cvvResultCode;
}
控制器:
@PostMapping
@ResponseStatus(OK)
public @ResponseBody ResponseEntity<transactionDto>
createTransaction(@RequestBody TransactionDto transactionDto) {
System.out.println(transactionDto);
return new ResponseEntity<Object>(transactionDto, OK);
}
JSON请求:
{
"createTransactionRequest": {
"merchantAuthentication": {
"name": "8r6dGL5hRZ",
"transactionKey": "72Ybq7QdQf475FjJ"
},
"refId": "123456",
"transactionRequest": {
"transactionType": "authCaptureTransaction",
"amount": "5",
"payment": {
"creditCard": {
"cardNumber": "5424000000000015",
"expirationDate": "2020-12",
"cardCode": "999"
}
},
"lineItems": {
"lineItem": {
"itemId": "1",
"name": "vase",
"description": "Cannes logo",
"quantity": "18",
"unitPrice": "45.00"
}
},
"tax": {
"amount": "4.26",
"name": "level2 tax name",
"description": "level2 tax"
},
"duty": {
"amount": "8.55",
"name": "duty name",
"description": "duty description"
},
"shipping": {
"amount": "4.26",
"name": "level2 tax name",
"description": "level2 tax"
},
"poNumber": "456654",
"customer": {
"id": "99999456654"
},
"billTo": {
"firstName": "Ellen",
"lastName": "Johnson",
"company": "Souveniropolis",
"address": "14 Main Street",
"city": "Pecan Springs",
"state": "TX",
"zip": "44628",
"country": "USA"
},
"shipTo": {
"firstName": "China",
"lastName": "Bayles",
"company": "Thyme for Tea",
"address": "12 Main Street",
"city": "Pecan Springs",
"state": "TX",
"zip": "44628",
"country": "USA"
},
"customerIP": "192.168.1.1",
}
}
}
}
问题:
当我处理请求时,我收到一个空的TransactionDto对象。
System.out.println(transactionDto)
TransactionDto(id=null,userName=null,apiKey=null,amount=0,accountNumber=null,expirationDate=null,cscCode=null,customerAccountCode=null,firstName=null,lastName=null,street=null,city=null,state=null,zipCode=null,phoneNumber=null,description=null)
如何使用Jackson将嵌套的JSON请求映射到简单的TransactionDto对象?或者其他一些?谢谢!
事务类是否与TransactionDto相同?
如果是这样,您可以在构造函数中添加@JsonCreator注释,并将此请求转换为所需的类。
public class Transaction {
// Using map to collect all properties at once
@JsonCreator
public Transaction(Map<String, Object> properties) {
this.name = properties.get("createTransactionRequest.merchantAuthentication.name");
...
}
// Using property annotation to specify
@JsonCreator
public Transaction(@JsonProperty("createTransactionRequest.merchantAuthentication.name") String name, ...) {
this.name = name;
...
}
}
有关更多详细信息:http://www.cowtowncoder.com/blog/archives/2011/07/entry_457.html
尝试在TransactionDto上注释@XmlRootElement
我想映射这个JSON数据: 对于此java对象: 但是它失败了,所有的值都是。我尝试在变量上方添加,但没有成功。 是否可以反序列化JSON,使其仅映射到(这个)一个类? 编辑:我使用Spring StreamListener进行如下映射:
问题内容: 我正在尝试将JSON文件映射到类对象,然后根据新接收的JSON更新卡。 我的JSON结构是这样的 我的班级看起来像这样: 如何将JSON文件中的值映射到CardInfo类创建的对象的字段中? 更新资料 以下试用版在 ci.description上 打印为null ,是否表示从未创建该对象? 更新2 打印cardInfo给出以下内容: {$ class:FirstCard,id:1,说明
假设我有这样的物体 我正在使用RestTemboard类从URL中获取json,如下所示: 之后,我想使用jackson对象映射器将json字符串转换为一个对象 将实体类作为第二个参数传递 问题是我应该如何编写ExampleJson实体来处理get-Showed json?我试过这样上课,但似乎不管用。 我得到了这样一个例外:
生成的对象不能是对象的,而是任何类型的,它包含与示例相同的值--只是转换为number。 我必须指定我自己的Jackson反序列化器吗(我怎么做?)对于这个问题,还是改变构造函数就足够了?
假设我有以下课程:
问题内容: 我在使用Jackson映射Javascript发布的哈希表(标记)数组时遇到问题。 这是控制器@RequestBody接收到的数据(以正确的json requestheader发送): 这是控制器: 当我调试并查看“实体”值时,它显示为通用对象的ArrayList,而不是我期望的“标签”类型的对象列表。 我如何让杰克逊将传递的对象数组映射到“标签”类型的对象列表? 谢谢 问题答案: 听