尝试将图像作为 byte[] 从 Spring 后端发送到 Angular 前端但是:
Trying to send a image as byte[] from Spring backend to Angular frontend but:
后端代码:
@GetMapping("datamatrix")
public ResponseEntity<byte[]> generarDataMatrix(Long id) throws IOException {
byte[] dataMatrixEnBytes = dataMatrix.generarDataMatrixImagen(id.toString(), id);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
return new ResponseEntity<>(dataMatrixEnBytes, headers, HttpStatus.OK);
}
在 Postman 中响应正常:
但是在Angular...
Angular代码:
- 服务:
generarDataMatrix( articulo: Articulo ): Observable<any> {
return this.httpClient.get<any>( this.rootUrl + "datamatrix?id=" + articulo.id );
}
- 方法调用者:
generarDataMatrix() {
this.dbServiceArticulo.generarDataMatrix( this.articuloSeleccionado )
.subscribe( (res) => {console.log( "res" )});
}
D M给我的两个方案我都做了,都成功了!
很确定默认的 Content-Type header 是 application/json 这就是 Angular 的 HttpClient 试图将字节数组解析为 JSON 的原因。您可以手动将请求的 HttpHeaders 设置为响应内容的正确 Content-Type。 – D M
否则,您可以将请求的 responseType 设置为 'blob':this.httpClient.get(this.rootUrl + '...', { responseType: 'blob' }) ;. – D M
后端代码:
@GetMapping("datamatrix")
public ResponseEntity<byte[]> generarDataMatrix(Long id) throws IOException {
byte[] dataMatrixEnBytes = dataMatrix.generarDataMatrixImagen(id.toString(), id);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
return new ResponseEntity<>(dataMatrixEnBytes, headers, HttpStatus.OK);
}
在 Postman 中响应正常:
但是在Angular...
Angular代码:
- 服务:
generarDataMatrix( articulo: Articulo ): Observable<any> {
return this.httpClient.get<any>( this.rootUrl + "datamatrix?id=" + articulo.id );
}
- 方法调用者:
generarDataMatrix() {
this.dbServiceArticulo.generarDataMatrix( this.articuloSeleccionado )
.subscribe( (res) => {console.log( "res" )});
}
D M给我的两个方案我都做了,都成功了!
很确定默认的 Content-Type header 是 application/json 这就是 Angular 的 HttpClient 试图将字节数组解析为 JSON 的原因。您可以手动将请求的 HttpHeaders 设置为响应内容的正确 Content-Type。 – D M
否则,您可以将请求的 responseType 设置为 'blob':this.httpClient.get(this.rootUrl + '...', { responseType: 'blob' }) ;. – D M