我有一个 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(); ... }