使用oneToMany关系将JSON映射到实体

时间:2018-10-10 21:49:03

标签: java json rest

im正在jsf,java中的前端项目中工作。 我的应用程序消耗了API剩余部分,该剩余部分提供了JSON。我必须将该JSON映射到实体。 我的问题是我的一个实体与其他实体具有一对多关系,而我不知道该如何映射。

我有实体Usuario:

public class usuario {

    private String usuario_pk;
    private String codigo;
    private List<penca> pencas;
    ...}

实体Penca:

public class penca {

    private String penca_pk;
    private String codigo;
...}

我的应用程序收到的JSON如下:

   {"usuario_pk":"3",
   "codigo":"terry",
    "pencas":[{"penca_pk":"1","codigo":"penca1"}]}

要连接API,请执行GET,然后使用以下方法将JSON映射到实体im:

import com.constantes.constantes;
import com.entity.usuario;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

public class restClient {
    private static final Logger LOGGER = Logger.getLogger(restClient.class.getName());

    private restClient() {
    }

    public static WebTarget getWebTarget(String service) {
        Client client = getClient();
        WebTarget target = client.target(constantes.url+"/"+service+"/");

        return target;
    }

    private static Client getClient() {
        Client client = ClientBuilder.newClient();
        return client;
    }

    public static <T> T invokeGet(WebTarget webTarget,Class<T> responseType, String primaryKey)  {

        Response response = webTarget.queryParam("pk", primaryKey).request(MediaType.APPLICATION_JSON).get(); 
        return respond(response, responseType);   
    }

    private static <T> T respond(Response response, Class<T> responseType)  {
        if (responseType == null){
            return null;
        } else if (responseType.isArray()) {
            return (T) response.readEntity(new GenericType<>(responseType));
        } else {
            return response.readEntity(responseType);
        }
    }
}

将JSON映射到没有关系的实体可以很好地工作,但是问题是当实体具有关系时。 有人可以说我可行的解决方案吗?谢谢。

0 个答案:

没有答案