Api returns blob 变量为 null
Api returns blob variable as null
已经在 Spring 引导函数中创建了 Rest Api,它使用少量变量创建新订单,并将图片作为 Blob 发送到数据库。
我一切正常,但现在当我尝试将此图片作为来自数据库的响应时,我将此 Blob 作为空值获取。
我的Controller代码如下图
@GetMapping(path = "/getallorders")
public List<OrderAllUsersResponse> getAllOrders() {
List<OrderAllUsersResponse> returnValue = new ArrayList<>();
List<OrderEntity> orders = orderRepostiory.findAllOrders();
ModelMapper modelMapper = new ModelMapper();
for (int i=0; i < orders.size(); i++) {
returnValue.add(modelMapper.map(orders.get(i), OrderAllUsersResponse.class));
}
return returnValue;
}
我的Repository代码如下图
public interface OrderRepostiory extends JpaRepository<OrderEntity, Long> {
@Query(value = "SELECT * FROM 34671478_opionion.cargo", nativeQuery = true)
List<OrderEntity> findAllOrders();
}
@Entity(name = "cargo")
public class OrderEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false)
private String orderId;
@Column(nullable = false)
private String customer;
@Column(nullable = false)
private String loadingCompanyName;
@Column(nullable = false)
private String loadingCity;
@Column(nullable = false)
private String loadingPostcode;
@Column(nullable = false)
private String dateOfLoading;
@Column(nullable = false)
private String unloadingCompanyName;
@Column(nullable = false)
private String unloadingCity;
@Column(nullable = false)
private String unloadingPostcode;
@Column(nullable = false)
private String dateOfUnloading;
@Column(nullable = false)
private Double nettoPrice;
@Column(nullable = false)
private Double bruttoPrice;
@Column(nullable = false)
private String information;
@Column(nullable = false)
private Boolean paymentStatus = false;
@ManyToOne
@NotFound(action= NotFoundAction.IGNORE)
@JoinColumn(name = "company_id")
private CompanyEntity companyDetails;
@Lob
@Column(name = "photo", columnDefinition="BLOB")
private byte[] data;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCustomer() {
return customer;
}
public void setCustomer(String customer) {
this.customer = customer;
}
public String getLoadingCompanyName() {
return loadingCompanyName;
}
public void setLoadingCompanyName(String loadingCompanyName) {
this.loadingCompanyName = loadingCompanyName;
}
public String getLoadingCity() {
return loadingCity;
}
public void setLoadingCity(String loadingCity) {
this.loadingCity = loadingCity;
}
public String getLoadingPostcode() {
return loadingPostcode;
}
public void setLoadingPostcode(String loadingPostcode) {
this.loadingPostcode = loadingPostcode;
}
public String getDateOfLoading() {
return dateOfLoading;
}
public void setDateOfLoading(String dateOfLoading) {
this.dateOfLoading = dateOfLoading;
}
public String getUnloadingCompanyName() {
return unloadingCompanyName;
}
public void setUnloadingCompanyName(String unloadingCompanyName) {
this.unloadingCompanyName = unloadingCompanyName;
}
public String getUnloadingCity() {
return unloadingCity;
}
public void setUnloadingCity(String unloadingCity) {
this.unloadingCity = unloadingCity;
}
public String getUnloadingPostcode() {
return unloadingPostcode;
}
public void setUnloadingPostcode(String unloadingPostcode) {
this.unloadingPostcode = unloadingPostcode;
}
public String getDateOfUnloading() {
return dateOfUnloading;
}
public void setDateOfUnloading(String dateOfUnloading) {
this.dateOfUnloading = dateOfUnloading;
}
public Double getNettoPrice() {
return nettoPrice;
}
public void setNettoPrice(Double nettoPrice) {
this.nettoPrice = nettoPrice;
}
public Double getBruttoPrice() {
return bruttoPrice;
}
public void setBruttoPrice(Double bruttoPrice) {
this.bruttoPrice = bruttoPrice;
}
public CompanyEntity getCompanyDetails() {
return companyDetails;
}
public void setCompanyDetails(CompanyEntity companyDetails) {
this.companyDetails = companyDetails;
}
public String getInformation() {
return information;
}
public void setInformation(String information) {
this.information = information;
}
public Boolean getPaymentStatus() {
return paymentStatus;
}
public void setPaymentStatus(Boolean paymentStatus) {
this.paymentStatus = paymentStatus;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
}
下面我将向您展示 Postman 的响应结果。
如您所见,变量 'photo' 为空。我如何修复它以将其作为例如 byte64string
下面是 OrderAllUsersResponse class 代码:
对于 modelMapper 的默认映射机制,您的源 (OrderEntity) 和目标 (OrderAllUsersResponse) 对象应该彼此相似。
@Entity(name = "cargo")
public class OrderEntity implements Serializable {
@Lob
@Column(name = "photo", columnDefinition="BLOB")
private byte[] data;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
和
import com.fasterxml.jackson.annotation.JsonProperty;
public class OrderAllUsersResponse {
@JsonProperty("photo")
private byte[] data;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
如果源字段名称与目标字段名称不同,那么要定义 属性 映射,您将使用 ModelMapper 的 TypeMap。
@Entity(name = "cargo")
public class OrderEntity implements Serializable {
@Lob
@Column(name = "photo", columnDefinition="BLOB")
private byte[] data;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
和
public class OrderAllUsersResponse {
private byte[] photo;
public byte[] getPhoto() {
return photo;
}
public void setPhoto(byte[] photo) {
this.photo = photo;
}
}
TypeMaping
@GetMapping(path = "/getallorders")
public List<OrderAllUsersResponse> getAllOrders() {
List<OrderAllUsersResponse> returnValue = new ArrayList<>();
List<OrderEntity> orders = orderRepostiory.findAllOrders();
ModelMapper modelMapper = new ModelMapper();
TypeMap<OrderEntity, OrderAllUsersResponse> propertyMapper = modelMapper.createTypeMap(OrderEntity.class, OrderAllUsersResponse.class);
for (int i=0; i < orders.size(); i++) {
propertyMapper.addMapping(OrderEntity::getData, OrderAllUsersResponse::setPhoto);
returnValue.add(modelMapper.map(orders.get(i), OrderAllUsersResponse.class));
}
return returnValue;
}
已经在 Spring 引导函数中创建了 Rest Api,它使用少量变量创建新订单,并将图片作为 Blob 发送到数据库。
我一切正常,但现在当我尝试将此图片作为来自数据库的响应时,我将此 Blob 作为空值获取。
我的Controller代码如下图
@GetMapping(path = "/getallorders")
public List<OrderAllUsersResponse> getAllOrders() {
List<OrderAllUsersResponse> returnValue = new ArrayList<>();
List<OrderEntity> orders = orderRepostiory.findAllOrders();
ModelMapper modelMapper = new ModelMapper();
for (int i=0; i < orders.size(); i++) {
returnValue.add(modelMapper.map(orders.get(i), OrderAllUsersResponse.class));
}
return returnValue;
}
我的Repository代码如下图
public interface OrderRepostiory extends JpaRepository<OrderEntity, Long> {
@Query(value = "SELECT * FROM 34671478_opionion.cargo", nativeQuery = true)
List<OrderEntity> findAllOrders();
}
@Entity(name = "cargo")
public class OrderEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false)
private String orderId;
@Column(nullable = false)
private String customer;
@Column(nullable = false)
private String loadingCompanyName;
@Column(nullable = false)
private String loadingCity;
@Column(nullable = false)
private String loadingPostcode;
@Column(nullable = false)
private String dateOfLoading;
@Column(nullable = false)
private String unloadingCompanyName;
@Column(nullable = false)
private String unloadingCity;
@Column(nullable = false)
private String unloadingPostcode;
@Column(nullable = false)
private String dateOfUnloading;
@Column(nullable = false)
private Double nettoPrice;
@Column(nullable = false)
private Double bruttoPrice;
@Column(nullable = false)
private String information;
@Column(nullable = false)
private Boolean paymentStatus = false;
@ManyToOne
@NotFound(action= NotFoundAction.IGNORE)
@JoinColumn(name = "company_id")
private CompanyEntity companyDetails;
@Lob
@Column(name = "photo", columnDefinition="BLOB")
private byte[] data;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCustomer() {
return customer;
}
public void setCustomer(String customer) {
this.customer = customer;
}
public String getLoadingCompanyName() {
return loadingCompanyName;
}
public void setLoadingCompanyName(String loadingCompanyName) {
this.loadingCompanyName = loadingCompanyName;
}
public String getLoadingCity() {
return loadingCity;
}
public void setLoadingCity(String loadingCity) {
this.loadingCity = loadingCity;
}
public String getLoadingPostcode() {
return loadingPostcode;
}
public void setLoadingPostcode(String loadingPostcode) {
this.loadingPostcode = loadingPostcode;
}
public String getDateOfLoading() {
return dateOfLoading;
}
public void setDateOfLoading(String dateOfLoading) {
this.dateOfLoading = dateOfLoading;
}
public String getUnloadingCompanyName() {
return unloadingCompanyName;
}
public void setUnloadingCompanyName(String unloadingCompanyName) {
this.unloadingCompanyName = unloadingCompanyName;
}
public String getUnloadingCity() {
return unloadingCity;
}
public void setUnloadingCity(String unloadingCity) {
this.unloadingCity = unloadingCity;
}
public String getUnloadingPostcode() {
return unloadingPostcode;
}
public void setUnloadingPostcode(String unloadingPostcode) {
this.unloadingPostcode = unloadingPostcode;
}
public String getDateOfUnloading() {
return dateOfUnloading;
}
public void setDateOfUnloading(String dateOfUnloading) {
this.dateOfUnloading = dateOfUnloading;
}
public Double getNettoPrice() {
return nettoPrice;
}
public void setNettoPrice(Double nettoPrice) {
this.nettoPrice = nettoPrice;
}
public Double getBruttoPrice() {
return bruttoPrice;
}
public void setBruttoPrice(Double bruttoPrice) {
this.bruttoPrice = bruttoPrice;
}
public CompanyEntity getCompanyDetails() {
return companyDetails;
}
public void setCompanyDetails(CompanyEntity companyDetails) {
this.companyDetails = companyDetails;
}
public String getInformation() {
return information;
}
public void setInformation(String information) {
this.information = information;
}
public Boolean getPaymentStatus() {
return paymentStatus;
}
public void setPaymentStatus(Boolean paymentStatus) {
this.paymentStatus = paymentStatus;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
}
下面我将向您展示 Postman 的响应结果。
如您所见,变量 'photo' 为空。我如何修复它以将其作为例如 byte64string
下面是 OrderAllUsersResponse class 代码:
对于 modelMapper 的默认映射机制,您的源 (OrderEntity) 和目标 (OrderAllUsersResponse) 对象应该彼此相似。
@Entity(name = "cargo")
public class OrderEntity implements Serializable {
@Lob
@Column(name = "photo", columnDefinition="BLOB")
private byte[] data;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
和
import com.fasterxml.jackson.annotation.JsonProperty;
public class OrderAllUsersResponse {
@JsonProperty("photo")
private byte[] data;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
如果源字段名称与目标字段名称不同,那么要定义 属性 映射,您将使用 ModelMapper 的 TypeMap。
@Entity(name = "cargo")
public class OrderEntity implements Serializable {
@Lob
@Column(name = "photo", columnDefinition="BLOB")
private byte[] data;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
和
public class OrderAllUsersResponse {
private byte[] photo;
public byte[] getPhoto() {
return photo;
}
public void setPhoto(byte[] photo) {
this.photo = photo;
}
}
TypeMaping
@GetMapping(path = "/getallorders")
public List<OrderAllUsersResponse> getAllOrders() {
List<OrderAllUsersResponse> returnValue = new ArrayList<>();
List<OrderEntity> orders = orderRepostiory.findAllOrders();
ModelMapper modelMapper = new ModelMapper();
TypeMap<OrderEntity, OrderAllUsersResponse> propertyMapper = modelMapper.createTypeMap(OrderEntity.class, OrderAllUsersResponse.class);
for (int i=0; i < orders.size(); i++) {
propertyMapper.addMapping(OrderEntity::getData, OrderAllUsersResponse::setPhoto);
returnValue.add(modelMapper.map(orders.get(i), OrderAllUsersResponse.class));
}
return returnValue;
}