4

我有这个由 Angular 发送的 JSON 字符串:

{
   "transaction_id": "1234",
   "usage": "Test Usage",
   "billing_address": {
      "first_name": "name",
      "last_name": "name",
      "address1": "street 1234",
      "zip_code": "11923"
   },
   "shipping_address": {
      "first_name": "name",
      "last_name": "name",
      "address1": "street 1234",
      "zip_code": "11923"
   }  
}

Java代码:

public class DTO {

    private String transaction_id;
    private String usage;
    private BillingAddress billingAddress;
    private ShippingAddress shippingAddress;

    ... getter/setter
}

public class BillingAddress {

    private String firstName;
    private String lastName;
    private String address1;    
    private String zip_code;
    ... getter/setter
}

public class ShippingAddress {

    private String firstName;
    private String lastName;
    private String address1;    
    private String zip_code;
    ... getter/setter
}

弹簧端点:

@PostMapping(value = "/{id}", consumes = { MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE })
      public ResponseEntity<?> handleWpfMessage(@PathVariable("id") id,
              @RequestBody DTO data){
        ....
}

映射内部对象以正确映射值的正确方法是billing_address什么shipping_address?我是否需要添加注释才能正确映射它们?

4

3 回答 3

3

您应该在 DTO 类中添加以下注释:

public class DTO {

    private String transaction_id;
    private String usage;

    @JsonProperty("billing_address")
    private BillingAddress billingAddress;

    @JsonProperty("shipping_address")
    private ShippingAddress shippingAddress;

    ... getter/setter
}
于 2019-09-05T08:24:10.563 回答
2

您的角度客户端使用蛇盒。为了使杰克逊正确反序列化,您可以使用以下命令全局配置它:

spring.jackson.property-naming-strategy=SNAKE_CASE

但是,您也可以为特定类配置它:

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class DTO {
}
于 2019-09-05T08:36:40.343 回答
0

如前所述,您可以在DTO课堂上使用 Jackson 属性映射注释。

@JsonProperty("billing_address")
private BillingAddress billingAddress;

这意味着,在 json 中,属性billing_address将被分配给billingAddress变量。

于 2019-09-05T08:44:46.833 回答