【问题标题】:Return Base64 encoded string from BLOB in Spring Boot?在 Spring Boot 中从 BLOB 返回 Base64 编码的字符串?
【发布时间】:2023-01-03 02:30:41
【问题描述】:

所以我有我的 LanguageController 类,其中我有这个方法:

@GetMapping("/languages")
public ResponseEntity<List<Language>> getAllLanguages(@RequestParam(required = false) String name) {
    try {
        List<Language> languages = new ArrayList<Language>();

        if (name == null) {
            languageRepository.findAll().forEach(languages::add);
        } else {
            languageRepository.findByNameContaining(name).forEach(languages::add);
        }

        if (languages.isEmpty()) {
            return new ResponseEntity<>(HttpStatus.NO_CONTENT);
        }

        return new ResponseEntity<>(languages, HttpStatus.OK);
    } catch (Exception e) {
        return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

Language 类是(省略了 getter 和 setter,所以它更干净):

@Entity
@Table(name = "languages")
public class Language {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "name")
    private String name;

    @Column(name = "audio")
    @Lob
    private Blob audio;

    @Column(name = "script")
    @Lob
    private Blob script;

    public Language() {

    }

    public Language(String name, Blob audio, Blob script) {
        this.name = name;
        this.audio = audio;
        this.script = script;
    }
}

在这里,当我使用 API 端点时,我得到了这个 JSON:

[
  {
    "id": 1,
    "name": "Test Language",
    "audio": {
      "binaryStream": {},
      "wrappedBlob": {
        "binaryStream": {},
        "traceId": 26,
        "traceObjectName": "blob26"
      }
    },
    "script": {
      "binaryStream": {},
      "wrappedBlob": {
        "binaryStream": {},
        "traceId": 27,
        "traceObjectName": "blob27"
      }
    }
  }
]

在这里我要返回 BLOB 流,这不是很有用。

我想返回以 Base64 编码的 BLOB,但我真的不知道在哪里对文件进行编码。

谢谢你的帮助!

【问题讨论】:

    标签: java spring spring-boot base64 blob


    【解决方案1】:

    您可能会尝试在实体类的 Blob 字段上使用 @JsonSerialize 注释来影响 blob 的序列化方式。 SqlBlobSerializer 类似乎正在转换为您正在寻找的 base64。

    @Column(name = "audio")
    @Lob
    @JsonSerialize(using = SqlBlobSerializer.class) 
    private Blob audio;
    

    【讨论】:

      【解决方案2】:

      您可以返回一个 LanguageDTO 实例,而不是返回 @Entity Language,DTO 是您从 Language 实例初始化的类,您可以在其中转换 Base64 中的 Blob。

      【讨论】:

        猜你喜欢
        • 2021-09-30
        • 1970-01-01
        • 2023-03-21
        • 2019-12-23
        • 1970-01-01
        • 1970-01-01
        • 2018-01-12
        • 2019-01-13
        相关资源
        最近更新 更多