我如何从 JAX-WS (JAX_RS) 中的 json 请求获取动态字段
How can i get dynamic field from json request in JAX-WS (JAX_RS)
我有一个 api,我收到了 json 格式的 Java pojo 请求:
{
"migrationId" : "32n2342342j";
"someDynamicField" : {"A" : "",
"B" : ""}
}
这个 someDynamicField
可以有不同的 属性 名称,我需要从中提取数据。
我无法为该模型设置 class,因为该字段是动态的。
但可以肯定的是someDynamicField
会是字符串类型,只是名称会不同。
可以肯定的是,someDynamicField
可以是来自有限集合的字符串之一,例如:["move", "source"......] 并且这个集合将来会增长。
例如:
{
"migrationId" : "32n2342342j";
"move" : {"sourHost" : "",
"targetHost" : ""}
}
有时可以
{
"migrationId" : "32n2342342j";
"delete" : {"sourHost" : "",
"targetHost" : ""}
}
从请求中提取此信息的最佳方法是什么?
我试着看一下这个:
这里他们明确地使用了可变名称,而在我的情况下,该字段是动态的?
我会使用字符串而不是对象并使用 Jackson 解析它。这不是完整的代码,而是类似于:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_JSON})
@Path("/blah")
public Response myMethod(String inputObject) {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(inputObject);
String migrationId = jsonNode.get("migrationId");
if( jsonNode.has("move") ) {
handleMoveNode(jsonNode.get("move"));
}
else if( jsonNode.has("delete") ) {
handleDeleteNode(jsonNode.get("delete"));
}
// handle the other node types
return Response.ok().build();
}
重点是在您的 JAX-RS 方法中获取一个字符串并自行解析它。
我有一个 api,我收到了 json 格式的 Java pojo 请求:
{
"migrationId" : "32n2342342j";
"someDynamicField" : {"A" : "",
"B" : ""}
}
这个 someDynamicField
可以有不同的 属性 名称,我需要从中提取数据。
我无法为该模型设置 class,因为该字段是动态的。
但可以肯定的是someDynamicField
会是字符串类型,只是名称会不同。
可以肯定的是,someDynamicField
可以是来自有限集合的字符串之一,例如:["move", "source"......] 并且这个集合将来会增长。
例如:
{
"migrationId" : "32n2342342j";
"move" : {"sourHost" : "",
"targetHost" : ""}
}
有时可以
{
"migrationId" : "32n2342342j";
"delete" : {"sourHost" : "",
"targetHost" : ""}
}
从请求中提取此信息的最佳方法是什么?
我试着看一下这个:
这里他们明确地使用了可变名称,而在我的情况下,该字段是动态的?
我会使用字符串而不是对象并使用 Jackson 解析它。这不是完整的代码,而是类似于:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_JSON})
@Path("/blah")
public Response myMethod(String inputObject) {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(inputObject);
String migrationId = jsonNode.get("migrationId");
if( jsonNode.has("move") ) {
handleMoveNode(jsonNode.get("move"));
}
else if( jsonNode.has("delete") ) {
handleDeleteNode(jsonNode.get("delete"));
}
// handle the other node types
return Response.ok().build();
}
重点是在您的 JAX-RS 方法中获取一个字符串并自行解析它。