如何将实体 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 可以处理正在发生的任何事情。
仔细查看您的放置请求中的图片。它告诉你 "Unsupported Media Type" 因为你的有效载荷不是 json.
改为更改负载,使其看起来像
{
"id": 0,
"nome": 14,
"modelo": "TT Tanca",
...
}
当服务器拒绝请求时会出现此错误 (415),因为资源的格式不受支持。您的控制器消耗 json,因此如果您向它发送的内容不是 json,请求将被拒绝。
这就是为什么空 body 它 "works" 但你的 body (有效载荷)却没有。
我正在 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 可以处理正在发生的任何事情。
仔细查看您的放置请求中的图片。它告诉你 "Unsupported Media Type" 因为你的有效载荷不是 json.
改为更改负载,使其看起来像
{
"id": 0,
"nome": 14,
"modelo": "TT Tanca",
...
}
当服务器拒绝请求时会出现此错误 (415),因为资源的格式不受支持。您的控制器消耗 json,因此如果您向它发送的内容不是 json,请求将被拒绝。
这就是为什么空 body 它 "works" 但你的 body (有效载荷)却没有。