如何将实体 class 与 PUT 中的 JSON 请求主体相关联?

How to associate entity class with JSON request body in PUT?

我正在 java、netbeans 中开发 Web 服务 Rest。

我已经完成了一些有效的 GET 方法,如下所示:

        @GET
        @Produces("application/json")
        @Path("usuario")
        public String getUsuarios(@QueryParam("key") String key) {

            Conta c = ContaDAO.busca(key);

            JsonObject obj = new JsonObject();
            JsonObject status = new JsonObject();
            if (c != null) {
                JsonArray array = (JsonArray) gson.toJsonTree(ejbUsuario.findAll());
                obj.add("dados", array);

                status.addProperty("codigo", 200);
                status.addProperty("mensagem", "OK");
                status.addProperty("descricao", "Sucesso na requisição");
                obj.add("status", status);

            } else {

                status.addProperty("codigo", 401);
                status.addProperty("mensagem", "Authorization Required");
                status.addProperty("descricao", erro401);
                obj.add("status", status);

            }
            return obj.toString();

        }

现在我需要做一个 PUT 方法,但它不起作用。

    @PUT
    @Consumes(MediaType.APPLICATION_JSON)
    @Path("bateria")
    public String postBateria(@QueryParam("key") String key, @QueryParam("mac") String mac, Tablet tablet) {

        Conta c = ContaDAO.busca(key);

        //ejbTablet.getBateria();

        JsonObject obj = new JsonObject();
        JsonObject status = new JsonObject();
        if (c != null) {
            TabletDAO.postBateria(mac, tablet.getBateria());
        }
        else
        {
            status.addProperty("codigo", 401);
            status.addProperty("mensagem", "Authorization Required");
            status.addProperty("descricao", erro401);
            obj.add("status", status);
        }

        return obj.toString();

    }

对于我使用的测试 "Postman",遵循我使用的请求:

如果我用空主体发出请求,函数被调用并且 tablet 变量显然为 null。

如果我将正文填充为图像,则不会调用该函数。 "HTTP Status 400 - Bad Request"

我的平板电脑 class 看起来像这样:

public class Tablet {
    private int id;
    private String nome;
    private String modelo;
    private Double tela;
    private String mac;
    private Double bateria;

    public Tablet() {
    }

    public Tablet(int id, String nome, String modelo, Double tela, String mac, Double bateria) {
        this.id = id;
        this.nome = nome;
        this.modelo = modelo;
        this.tela = tela;
        this.mac = mac;
        this.bateria = bateria;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }



    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public Double getTela() {
        return tela;
    }

    public void setTela(Double tela) {
        this.tela = tela;
    }

    public String getMac() {
        return mac;
    }

    public void setMac(String mac) {
        this.mac = mac;
    }

    public Double getBateria() {
        return bateria;
    }

    public void setBateria(Double bateria) {
        this.bateria = bateria;
    }
}

glassfish 日志:"Record: line 3: 1 mismatched input '"name"' expecting '}'"

我在 java 中看到了 PUT 方法的其他示例,但是 none 可以处理正在发生的任何事情。

https://pt.whosebug.com/questions/140528/d%C3%BAvida-com-webservice-m%C3%A9todo-put-e-delete-como-implementar-em-java

仔细查看您的放置请求中的图片。它告诉你 "Unsupported Media Type" 因为你的有效载荷不是 json.

改为更改负载,使其看起来像

{
  "id": 0,
  "nome": 14,
  "modelo": "TT Tanca",
  ...
}

当服务器拒绝请求时会出现此错误 (415),因为资源的格式不受支持。您的控制器消耗 json,因此如果您向它发送的内容不是 json,请求将被拒绝。

这就是为什么空 body 它 "works" 但你的 body (有效载荷)却没有。