有没有办法在模型属性中将字节数组转换为字符串?



我有一个名为"Post"的模型类,它有一个属性"postContent"作为byteArray。

public class Post{
byte[] postContnet;
//getters
//setters
...
}

因此,我正在使用弹簧启动和弹簧表单标签来使用 modelAttribute 获取用户的输入。我使用字节数组的原因是我正在使用 Ckeditor 来获取所见即所得的内容。

<form:form ...... modelAttribute="post">
...
<form:textarea path="postContect" id="editor1">
....
</form:form>

在将帖子插入数据库时,我没有转换任何内容,它入到 MySQL 数据库中,其中帖子内容列是 Blob 类型。但是,当我出于编辑目的检索内容时,我得到的是字节数组,而不是它应该是一个字符串。在控制器中,我获取数据并将其发送到 JSP,如下所示:

....
Post post = postService.findByPostId(postId);
if (post != null) {
mv.addObject("title", "Edit Post");
mv.addObject("post", post);
...

因此,当我在JSP中使用JSTL时,它将postContect打印为数组。我可以在将字符串转换为字节数组时获得许多参考,反之亦然,但在这里,由于我使用的是弹簧形式和模型属性,我不确定应该在哪里编辑。我怎样才能在两者之间找回字符串?

谢谢。

我已经找到了答案,它对我有用。我在这里添加评论是因为有类似问题的人会得到一个想法。

  1. 我为字符串到字节数组创建了 Spring 转换器

    @Component public class StringBase64ToByteArray 实现 Converter {

    @Override
    public byte[] convert(String source) {
    byte[] byteSource = null;
    System.out.println("StringBase64ToByteArray is called");
    try {
    byteSource = Base64.getEncoder().encode(source.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return byteSource;
    }
    

    }

  2. 然后我创建了另一个转换器到字节数组到字符串

    @Component public class ByteArrayToStringBase64 实现了 Converter{

    @Override
    public String convert(byte[] source) {
    byte[] decodedString = Base64.getDecoder().decode(source);
    return new String(decodedString);
    }
    

    }

  3. 我已经将两个转换器注册到弹簧启动配置 @Configuration public class WebMvcConfig implements WebMvcConfigurer{

    @Override
    public void addFormatters(FormatterRegistry registry) {
    registry.addConverter(new StringBase64ToByteArray());
    registry.addConverter(new ByteArrayToStringBase64());
    }   
    

    }

最新更新