can Rest API解析hashmap <string,object>?

时间:2017-06-14 08:18:51

标签: java json rest jersey

我想知道如果在使用输入参数时休息api可以执行以下操作:

假设我的json对象具有以下参数:

string name;

string adress;

hashmap<string,object> content;

这是一个可以发送的例子:

{
    "name": "AZ",
    "adress": "US",
    "content": {
        "clients": [
            {
                "client_ref":"213",
                "commands" : {
                    "subCommands": [
                        {
                            "num":"1",
                            "price":"10euro"
                        },
                        {
                            "num":"12,
                            "price":"10euro"
                        }
                    ]
                }
            },
            {
                "client_ref":"213",
                "commands" : {
                    "subCommands": [
                        {
                            "num":"1",
                            "price":"10euro"
                        },
                        {
                            "num":"12,
                            "price":"10euro"
                        }
                    ]
                }
            }
        ]
    }
}

问题是可以继续构建hashmap,其中对象本身可以有n个hashmap类型的子...?

(我使用球衣作为休息实施)

3 个答案:

答案 0 :(得分:0)

content是一个对象,而不是地图。

"content": {
    "clients": [
        {
            "client_ref":"213",
            "commands" : {
                "subCommands": [
                    {
                        "num":"1",
                        "price":"10euro"
                    },
                    {
                        "num":"12,
                        "price":"10euro"
                    }
                ]
            }
        },
        {
            "client_ref":"213",
            "commands" : {
                "subCommands": [
                    {
                        "num":"1",
                        "price":"10euro"
                    },
                    {
                        "num":"12,
                        "price":"10euro"
                    }
                ]
            }
        }
    ]
}

这是Java Object演示文稿。

public class Content {

    private List<Client> clients;

    //Getters and setters
}


public class Client {

    private String clientRef;
    private List<Command> commands;

    //Getters and setters
}
//And so on, define other classes.

要回答您的问题,是的,您可以构建地图。 请检查这个例子。它告诉你如何解析一个未知的json(如果你不知道你的json对象的确切结构)。 https://stackoverflow.com/a/44331104/4587961

然后您可以使用字段构建地图 Map<String, Object>此地图的某些值将是嵌套地图。

答案 1 :(得分:0)

您可以使用 javax.ws.rs.core.GenericEntity 来包装具有泛型类型的集合(您的HashMap)。

@GET
@Path("/mapping")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response getAllMapContents() {

    Map<String,Object> map = new HashMap<String,Object>();

    map.put("Hello", "World");
    map.put("employee", new Employee(1,"nomad"));

    GenericEntity<Map<String,Object>> entity = new GenericEntity<Map<String,Object>>(map) {};
    return Response.ok(entity).build();
}

我查了一下,发现它正常工作请在下面找到答案。谢谢。

{
   "Hello": "World",
   "employee": {
      "id": 1,
      "name": "nomad"
   }
}

答案 2 :(得分:0)

假设您有一个JSON提供程序,例如Jackson注册,您的模型类看起来像:

public class Foo {

    private String name;
    private String address;
    private Map<String, Object> content;

    // Getters and setters
}

以下资源方法:

@Path("foo")
public class Test {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response post(Foo foo) {
        ...
    }
}

可以处理如下请求:

POST /api/foo HTTP/1.1
Host: example.org
Content-Type: application/json

{
  "name": "AZ",
  "adress": "US",
  "content": {
    "clients": [
      {
        "client_ref": "213",
        "commands": {
          "subCommands": [...]
        }
      },
      {
        "client_ref": "213",
        "commands": {
          "subCommands": [...]
        }
      }
    ]
  }
}