Коллекция карт внутри объекта в POST-запросе в JAX-RS - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть класс под названием 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 получает JSON-объект POST-запроса, который является внутри него Customer и Contact Number.

{
  "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 голосов
/ 30 апреля 2018

Если вы используете Джексона для обработки преобразования JSON.

  • Вы можете использовать пользовательский десериализатор (через @ JsonDeserialize на уровне класса).
  • Или напишите адаптер, который преобразует ваш ContactNum в коллекцию ContactNum's.

Но если вы измените свой ввод JSON с

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

до

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

(contactNums изменен с объекта на массив объектов)

Таким образом, преобразование должно работать из коробки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...