有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从JAXWS(JAX_RS)中的json请求中获取动态字段

我有一个api,我正在接收json格式的Java pojo请求:

{
   "migrationId" : "32n2342342j";
   "someDynamicField" : {"A" : "", 
                        "B" : ""}
} 

这个someDynamicField可以有不同的属性名,我需要从中添加数据。
由于该字段是动态的,因此我无法为该模型创建类
但可以肯定的是someDynamicField将是字符串类型,但名称将不同。
有一件事是可以确定的,someDynamicField可以是有限集合中的字符串之一,例如:[“move”,“source”…]这一套将在未来发展壮大。
例如:

{
   "migrationId" : "32n2342342j";
   "move" : {"sourHost" : "", 
             "targetHost" : ""}
}

有时候可能是这样

{
   "migrationId" : "32n2342342j";
   "delete" : {"sourHost" : "", 
             "targetHost" : ""}
}

从请求中提取这些信息的最佳方式是什么?
我试着看这个:How to map dynamic JSON in JAX-RS
这里他们显式地使用可变名称,在我的例子中,字段是动态的


共 (1) 个答案

  1. # 1 楼答案

    我会用一个字符串而不是一个对象,然后用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方法中获取一个字符串,然后自己解析它