Ola,
Estou desenvolvendo um servidor WEB em java utilizando Jersey e Hibernate para um aplicativo Android. Minha classe "User" possui o campo "picture" que é um Blob, qual seria a melhor maneira de fazer o download de uma instância da dessa classe?
package pojo;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.List;
@XmlRootElement
@Entity
@Table
public class User implements Serializable{
@Id
@Column(name="idUser",unique = true)
private String idUser;
@Column(name="name",nullable = false)
private String name;
@Column(name="date",nullable = false)
private String date;
@Column(name="gender",nullable = false)
private String gender;
@Column(name="points",nullable = false)
private int points;
@Column(name="telephone",nullable = false)
private String telephone;
@Column(name="password",nullable = false)
private String password;
@Column(name="email",nullable = false)
private String email;
@Column(name="profile",nullable = false)
private String profile;
@Column(name="picture")
private byte[] picture;
@ManyToMany(mappedBy = "users")
private List<Home> homes;
public User(){}
public User(String idUser, String name, String date, String gender, int points, String telephone, String password, String email, String profile, byte[] picture) {
this.idUser = idUser;
this.name = name;
this.date = date;
this.gender = gender;
this.points = points;
this.telephone = telephone;
this.password = password;
this.email = email;
this.profile = profile;
this.picture = picture;
}
public String getIdUser() {
return idUser;
}
public void setIdUser(String idUser) {
this.idUser = idUser;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getProfile() {
return profile;
}
public void setProfile(String profile) {
this.profile = profile;
}
public byte[] getPicture() {
return picture;
}
public void setPicture(byte[] picture) {
this.picture = picture;
}
public List<Home> getHomes() {
return homes;
}
public void setHomes(List<Home> homes) {
this.homes = homes;
}
}
Para outras entities sem campos Blob eu estava enviando em formato JSON, no caso do 'User' pensei em fazer em duas URLs separadas, uma para fazer o download da foto com que produz 'application/octet-stream' e outra para o outros campos do 'User' em formato JSON. Seria essa a melhor forma?
@Authorize
@Path("/user/{idUser}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getUser(@PathParam("idUser") String idUser) {
DAO dao = new DAO();
User user = dao.find(User.class, idUser);
user.setHomes(null);
user.setPicture(null);
dao.close();
return Response.ok(user).build();
}
@Authorize
@Path("/user/{idUser}/picture")
@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getUserPicture(@PathParam("idUser") String idUser) {
DAO dao = new DAO();
User user = dao.find(User.class, idUser);
dao.close();
return Response.ok(user.getPicture()).build();
}