JAX-RS中POST请求中的Object内部的Map Collection

时间:2018-04-30 07:05:22

标签: java hibernate jax-rs

我有一个名为Customer的课程。

@Entity
@Table(name = "customer")
public class Customer {
    @Id
    @Column(unique = true)
    private String userId;
    @Column(unique = true)
    private String userName;
    private String fullName;
    @Column(unique = true)
    private String emailAddress;
    private String password;
    private String country;
    @ElementCollection
    private Collection<ContactNum> contactNums =  new ArrayList<>();
    private String district;
    private String dateOfBirth;
    private String gender;
}

并且有一组联系号码。

@XmlRootElement
@Embeddable
public class ContactNum {
    private String landLine;
    @Column(unique = true)
    private String mobile;

    public String getLandLine() {
        return landLine;
    }

    public void setLandLine(String landLine) {
        this.landLine = landLine;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
}

我的REST API正在获取一个POST请求JSON对象,其中包含客户和联系号码。

{
  "userName": "aaaa",
  "fullName": "aaaa",
  "emailAddress": "aaaa",
  "password": "aaaa",
  "country": "aaaa",
  "contactNums" : {
    "landLine": "0000000000",
    "mobile": "0000000000"
  },
  "district": "aaaa",
  "dateOfBirth": "813695400000",
  "gender": "aaaa"
}

如何在JAX-RS客户端中映射该请求?获取请求的方法是这样的。我还使用Hibernate作为ORM工具。

 @POST
 @Path("registerCustomer")
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.APPLICATION_JSON)
 public Response registerCustomer(Customer newCustomer) {
 }

1 个答案:

答案 0 :(得分:0)

如果您正在使用Jackson来处理JSON转换。

  • 您可以使用自定义反序列化程序(通过@JsonDeserialize 在课堂上)。
  • 或者编写一个转换ContactNum的适配器 收集ContactNum&#39;

但是如果您从

更改JSON输入
"contactNums" : {
"landLine": "0000000000",
"mobile": "0000000000"
}

"contactNums" : [{
"landLine": "0000000000",
"mobile": "0000000000"
}]

(contactNums从对象更改为对象数组)

这种方式转换应该是开箱即用的。