Как получить объект Json на веб-сервисе Restful?

Я реализую веб-сервис RESTful на Java с библиотекой Джерси. Я хочу, чтобы он получил объект Json, а затем преобразовал его в класс Usuario (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, Идеи?

2 ответа

Решение

Не используйте Gson, джерси будет отлично работать с JAXB с провайдером MOXy (по умолчанию для Glassfish/Payara).

Все, что вам нужно сделать, это аннотировать поля pojo правильными аннотациями JAXB, а затем просто использовать Usuario введите себя в качестве параметра метода.

@PUT
@Path("registro")
@Consumes(MediaType.APPLICATION_JSON)
public String registrarUsuario(Usuario usuario) {

Я определенно не знаком с этой библиотекой, но я предполагаю, что вам нужно будет рассказать ей, как сопоставить поля JSON с атрибутами Java. Может быть, какие-то аннотации?

Другие вопросы по тегам