java - 如何在 Restful 网络服务上接收 Json 对象?
java - How to receive a Json object on a Restful web service?
我正在使用 Jersey 库在 Java 上实施 RESTful Web 服务。我希望它接收一个 Json 对象,然后将其转换为 Usuario class (pojo) 以插入到数据库中。这是当前代码
UsuarioResource.java
package com.tienda.rest.recurso;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.tienda.rest.pojo.Usuario;
import com.tienda.rest.service.UsuarioService;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.core.MediaType;
/**
* REST Web Service
*
*/
@Path("usuario")
public class UsuarioResource {
@Context
private UriInfo context;
private final UsuarioService service;
private final Gson json;
/**
* Creates a new instance of UsuarioResource
*/
public UsuarioResource() {
this.service = new UsuarioService();
this.json = new Gson();
}
/* Other codes */
@PUT
@Path("registro")
@Consumes(MediaType.APPLICATION_JSON)
public String registrarUsuario(JsonElement usuario) {
System.out.println((usuario != null) + usuario.getAsString());
return usuario.getAsString();
//Usuario nuevo = this.json.fromJson(usuario, Usuario.class);
//return this.service.registrarUsuario(nuevo);
}
}
Usuario.java
package com.tienda.rest.pojo;
import java.io.Serializable;
import java.util.Date;
/**
* Clase que representa un registro de la base de datos, de la tabla
* {@code usuario}.
*/
public class Usuario implements Serializable {
private String usuario;
private String nombre;
private String apellidos;
private Date fechaNacimiento;
private String direccion;
private String telefono;
private String clave;
public Usuario() {
}
public Usuario(String usuario) {
this.usuario = usuario;
}
public Usuario(String usuario, String clave) {
this.usuario = usuario;
this.clave = clave;
}
public Usuario(String usuario, String nombre, String apellidos, Date fechaNacimiento, String direccion, String telefono, String clave) {
this.usuario = usuario;
this.nombre = nombre;
this.apellidos = apellidos;
this.fechaNacimiento = fechaNacimiento;
this.direccion = direccion;
this.telefono = telefono;
this.clave = clave;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public Date getFechaNacimiento() {
return fechaNacimiento;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public String getClave() {
return clave;
}
public void setClave(String clave) {
this.clave = clave;
}
}
此刻,这段代码抛出 JsonMappingException
。想法?
不要使用 Gson,jersey 将与带有 MOXy 提供程序的 JAXB 完美配合(默认为 Glassfish/Payara)。
您所要做的就是使用正确的 JAXB 注释对 pojo 字段进行注释,然后只需使用 Usuario
类型本身作为方法参数。
@PUT
@Path("registro")
@Consumes(MediaType.APPLICATION_JSON)
public String registrarUsuario(Usuario usuario) {
我绝对不熟悉这个库,但我假设您需要告诉它如何将 JSON 字段映射到 Java 属性。也许是某种注释?
我正在使用 Jersey 库在 Java 上实施 RESTful Web 服务。我希望它接收一个 Json 对象,然后将其转换为 Usuario class (pojo) 以插入到数据库中。这是当前代码
UsuarioResource.java
package com.tienda.rest.recurso;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.tienda.rest.pojo.Usuario;
import com.tienda.rest.service.UsuarioService;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.core.MediaType;
/**
* REST Web Service
*
*/
@Path("usuario")
public class UsuarioResource {
@Context
private UriInfo context;
private final UsuarioService service;
private final Gson json;
/**
* Creates a new instance of UsuarioResource
*/
public UsuarioResource() {
this.service = new UsuarioService();
this.json = new Gson();
}
/* Other codes */
@PUT
@Path("registro")
@Consumes(MediaType.APPLICATION_JSON)
public String registrarUsuario(JsonElement usuario) {
System.out.println((usuario != null) + usuario.getAsString());
return usuario.getAsString();
//Usuario nuevo = this.json.fromJson(usuario, Usuario.class);
//return this.service.registrarUsuario(nuevo);
}
}
Usuario.java
package com.tienda.rest.pojo;
import java.io.Serializable;
import java.util.Date;
/**
* Clase que representa un registro de la base de datos, de la tabla
* {@code usuario}.
*/
public class Usuario implements Serializable {
private String usuario;
private String nombre;
private String apellidos;
private Date fechaNacimiento;
private String direccion;
private String telefono;
private String clave;
public Usuario() {
}
public Usuario(String usuario) {
this.usuario = usuario;
}
public Usuario(String usuario, String clave) {
this.usuario = usuario;
this.clave = clave;
}
public Usuario(String usuario, String nombre, String apellidos, Date fechaNacimiento, String direccion, String telefono, String clave) {
this.usuario = usuario;
this.nombre = nombre;
this.apellidos = apellidos;
this.fechaNacimiento = fechaNacimiento;
this.direccion = direccion;
this.telefono = telefono;
this.clave = clave;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public Date getFechaNacimiento() {
return fechaNacimiento;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public String getClave() {
return clave;
}
public void setClave(String clave) {
this.clave = clave;
}
}
此刻,这段代码抛出 JsonMappingException
。想法?
不要使用 Gson,jersey 将与带有 MOXy 提供程序的 JAXB 完美配合(默认为 Glassfish/Payara)。
您所要做的就是使用正确的 JAXB 注释对 pojo 字段进行注释,然后只需使用 Usuario
类型本身作为方法参数。
@PUT
@Path("registro")
@Consumes(MediaType.APPLICATION_JSON)
public String registrarUsuario(Usuario usuario) {
我绝对不熟悉这个库,但我假设您需要告诉它如何将 JSON 字段映射到 Java 属性。也许是某种注释?