Como recuperar datos json en servicio web jax-rs

Z

Tengo echo un servicio web que funciona todo excepto el put,

@PUT
	@Path("/Updatemember")
	@Consumes({"application/json"})
	@Produces(MediaType.TEXT_PLAIN)
	public String Updatemember(Miembro miembro) throws SQLException
	{
		miembro.update();//si intento usar e lobjeto miembro me falla
		return "Se han actualizado los datos del miembro";
	}

la clase miembro tiene la etiqueta xmlroot y todo eso,tiene un constructor que recibe los cuatro parametros que le mando por json

public Miembro(String nombre, String apellidos, String afiliacion,
			String nacionalidad) 
	{
		super();
		this.nombre = nombre;
		this.apellidos = apellidos;
		this.afiliacion = afiliacion;
		this.nacionalidad = nacionalidad;
	}

y el metodo update ,que también esta comprobado que funciona

public void update() throws SQLException
	{
		Connection conexion = Conexion.GetConnection();
		String sql = "UPDATE miembros SET afiliacion='"+getAfiliacion()+"', nacionalidad='"+getNacionalidad()+"' WHERE nombre='"+getNombre()+"' AND apellidos='"+getApellidos()+"'";
		PreparedStatement pre = (PreparedStatement) conexion.prepareStatement(sql);
		pre.execute();
	}

La cuestion es que en el metodo updatemember si intento usar el objeto miembro que recibe por parametro,vamos que me da una nullpointerexception, que le falta para crear el objeto??es la primera vez que trato con esto y no tengo mucha idea

zoeshadow

Está claro que la ruta te está funcionando por el Null Pointer Exception, el hecho de que estés usando PUT o POST debería dar igual, ya que son meramente semánticos( el sentido se lo damos nosotros no la máquina )

Debería verificar que lo que le estás mandando al servicio web en la petición ( puedes usar Postman por ejemplo ).

También se me ocurre que tu clase Miembro no está implementando serializable, lo cual dependiendo de la implementación del mapper que estés usando puede dar problemas.

1 respuesta
bLero

#1

Es obligatorio que tengas también un constructor por defecto en la clase miembro, seguramente te esté fallando eso.

#2 usar PUT o POST no da igual, si tiene puesto @PUT y hace un POST a la misma URL no se va a hacer la llamada a ese método.

Otra cosa es que se quiera utilizar @PUT o @POST para conseguir la misma funcionalidad, o incluso @GET, pero ya no sería un servicio web restful, que parece ser lo que se pretende.

JuAn4k4

Necesitas el constructor vacio (Miembro tiene que ser un POJO), generalmente para mapear de json a objeto se usa reflection, y no te va a encontrar ese constructor de 4 argumentos.

UpdateMember (Miembro miembro) // Spanglish approved.

1 respuesta
Zerokkk

Como ya te han dicho, un constructor por defecto en la clase Miembro y la implementación de Serializable podrían arreglarte el problema.

Como consejo, trata de usar un sólo idioma cuando programes. Eso de llamar a la clase "Miembro" y a los métodos "algo-member) es una mala praxis.

1 respuesta
Z

#5 #4 Tomo nota :palm:

Usuarios habituales