使用dropwizard时对BLOB的base64编码感到困惑

是的。

我有一个针对postgres和一张桌子的dropwizard应用程序。我将实体类中的BLOB列定义为byte []:

@Entity
@Table(name = "document")
@NamedQueries({
        @NamedQuery(
                name = "my.documents.model.Document.findAll",
                query = "SELECT d FROM Document d"
        )
})
public class Document {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "documentName", nullable = false)
    private String documentName;

    @Column(name = "documentData")
    private byte[] documentData;    
    ...
 }

当我使用curl或邮递员测试POST API时,我首先使用base64对BLOB数据字符串(“我的mlob数据”)进行编码。请注意,如果没有编码,它不会让我提交:

{"documentName":"Invoice1","documentData":"bXkgYmxvYiBkYXRhCg=="}

在API中,我希望必须手动解码字节,但是不,它似乎已经被解码了。下面的代码段显示“我的Blob数据”。

@Path("/documents")
@Produces(MediaType.APPLICATION_JSON)
public class DocumentsResource {

    @POST
    @UnitOfWork
    public Document createDocument(Document document) {
        byte[] data = document.getDocumentData();
         System.out.println("new String(data));
        }
        ...
    }
    ...
}

但是,当我使用Java服务器端客户端测试API并使用Base64进行编码时,它仍会以API端的编码形式出现:

Client client;
Document document;
String s = new String("my blob data");
document.setdocumentData(Base64.encode(s.getBytes());

client.target(myurl).request()
  .post(Entity.entity(document, MediaType.APPLICATION_JSON_TYPE));

当我发送纯净的,未编码的字符串(或二进制)时,它在接收API端显示正确。

我不明白:

  • 当我通过curl或邮递员调用API时,为什么数据会被神奇地解码

  • 从Java代码调用API时,为什么API无需编码就可以工作。

纳坦

Jacksonbyte[]使用base64编码器自动对字段进行序列化和反序列化

您的错误是base64在Jackson之前手动对其进行编码,这意味着它在JSON上对base64进行了两次编码。

你应该改变

document.setdocumentData(Base64.encode(s.getBytes()));

document.setdocumentData(s.getBytes());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解码大的base64编码的Blob

来自分类Dev

如何在HTML5 Blob对象上使用base64编码

来自分类Dev

base64将clob编码为blob

来自分类Dev

使用Base64编码ImageMagick图像

来自分类Dev

调用使用base64编码的<或>的gmail发送API时,ByteString错误的值无效

来自分类Dev

Gmail API发送邮件时不使用Base64编码

来自分类Dev

如何在不使用base64编码的情况下从ruby将blob数据提交到MySQL

来自分类Dev

Python Base64编码与Java Base64编码

来自分类Dev

Base64编码失败

来自分类Dev

Base64编码换行

来自分类Dev

Base64规范编码

来自分类Dev

Javascript base64编码

来自分类Dev

使用delphi 2007编码base64和解码base64

来自分类Dev

为什么使用CryptoJS的base64与标准base64编码不同?

来自分类Dev

使用Delphi 2007编码base64和解码base64

来自分类Dev

perl base64使用url安全字符进行编码

来自分类Dev

使用JavaScript创建base64编码的图像

来自分类Dev

base64使用python 2.7编码,解码成块的文件

来自分类Dev

是否使用FormData上传base64编码的图像?

来自分类Dev

使用C#将FileStream编码为base64

来自分类Dev

如何使用Perl转换base64编码的文件?

来自分类Dev

使用Java在Base64中从URL编码图像

来自分类Dev

在Java中使用BASE64进行解码和编码

来自分类Dev

如何在Ruby on Rails中使用Base64编码?

来自分类Dev

使用数据URI的Base64编码的OpenType字体

来自分类Dev

Hasura Relay-如何使用Base64编码的ID?

来自分类Dev

使用curl发送base64编码的图像

来自分类Dev

使用C和OpenSSL进行Base64编码

来自分类Dev

在并集内部使用结构对base64进行编码