У меня есть ресурс JAX-RS, который получает его параматерей как строку JSON как это:
http://some.test/aresource?query={"paramA":"value1", "paramB":"value2"}
Причина использовать JSON здесь, то, что объект запроса может быть довольно сложным в реальных вариантах использования.
Я хотел бы преобразовать строку JSON в объект Java, dto в примере:
@GET
@Produces("text/plain")
public String getIt(@QueryParam("query") DataTransferObject dto ) {
...
}
JAX-RS поддерживает такое преобразование из JSON, переданного как параметрический усилитель запроса объектам Java?
Да, вы можете это сделать, но вам нужно будет написать код преобразования самостоятельно. К счастью, это просто, вам просто нужно написать класс, который имеет общедоступный конструктор String
для выполнения преобразования. Например:
public class JSONParam {
private DataTransferObject dto;
public JSONParam(String json) throws WebApplicationException {
try {
// convert json string DataTransferObject and set dto
}
catch (JSONException e) {
throw new WebApplicationException(Response.status(Status.BAD_REQUEST)
.entity("Couldn't parse JSON string: " + e.getMessage())
.build());
}
}
public DataTransferObject getDTO() {
return dto;
}
}
Затем вы можете использовать:
@GET
@Produces("text/plain")
public String getIt(@QueryParam("query") JSONParam json) {
DataTransferObject dto = json.getDTO();
...
}