首页 > 解决方案 > 如何将实体类与 PUT 中的 JSON 请求正文相关联?

问题描述

我正在用 java、netbeans 开发一个 web 服务休息。

我已经完成了一些有效的 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();

    }

对于我使用“邮递员”的测试,遵循我使用的请求: 在此处输入图像描述 在此处输入图像描述

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

如果我将身体填充为图像,则不会调用该函数。“HTTP 状态 400 - 错误请求”

我的平板电脑类如下所示:

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 日志:“记录:第 3 行:1 不匹配的输入 '"name"' 期望 '}'”

我在 java 中看到了 PUT 方法的其他示例,但没有一个处理与正在发生的事情类似的事情。

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

如何在 HttpURLConnection 中发送 PUT、DELETE HTTP 请求?

标签: javajsonrestweb-services

解决方案


仔细查看您的 put 请求中的图像。它告诉您“不支持的媒体类型”,因为您的有效负载不是 json。

相反,更改有效负载,使其看起来像

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

当服务器拒绝请求时会发生此错误 (415),因为资源的格式不受支持。您的控制器使用 json,因此如果您向其发送非 json 的内容,请求将被拒绝。

这就是为什么对于一个空的身体它“工作”但对于你的身体(有效载荷)它没有。


推荐阅读