java - 如何将实体类与 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 方法的其他示例,但没有一个处理与正在发生的事情类似的事情。
解决方案
仔细查看您的 put 请求中的图像。它告诉您“不支持的媒体类型”,因为您的有效负载不是 json。
相反,更改有效负载,使其看起来像
{
"id": 0,
"nome": 14,
"modelo": "TT Tanca",
...
}
当服务器拒绝请求时会发生此错误 (415),因为资源的格式不受支持。您的控制器使用 json,因此如果您向其发送非 json 的内容,请求将被拒绝。
这就是为什么对于一个空的身体它“工作”但对于你的身体(有效载荷)它没有。
推荐阅读
- python - 不知道为什么路径只存在于while循环的一部分
- api - 在 Flutter 中使用 http 向 API 发出 post 请求
- graphql - 在 apollo graphql 服务器上的单个 api 调用中解决批量查询
- postgresql - postgresql:如何从表的非后续 id 中获取现有 id
- xml - 通过 Cake 构建脚本报告 .NET Core XUnit 测试,以便 Azure DevOps 可以使用它
- dart - 在颤动中使用块和下拉菜单
- android - 使用 Picasso 从 URL 加载的 ImageView 并不总是适合全屏宽度
- android - 从另一个应用程序以调试模式启动应用程序
- html - 结构化数据测试工具中的面包屑列表最后一项错误:“需要项字段的值。”
- html - 更改按钮内图标的边框颜色