我有一个名为"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打印为数组。我可以在将字符串转换为字节数组时获得许多参考,反之亦然,但在这里,由于我使用的是弹簧形式和模型属性,我不确定应该在哪里编辑。我怎样才能在两者之间找回字符串?
谢谢。
我已经找到了答案,它对我有用。我在这里添加评论是因为有类似问题的人会得到一个想法。
-
我为字符串到字节数组创建了 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; }
}
-
然后我创建了另一个转换器到字节数组到字符串
@Component public class ByteArrayToStringBase64 实现了 Converter{
@Override public String convert(byte[] source) { byte[] decodedString = Base64.getDecoder().decode(source); return new String(decodedString); }
}
-
我已经将两个转换器注册到弹簧启动配置 @Configuration public class WebMvcConfig implements WebMvcConfigurer{
@Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringBase64ToByteArray()); registry.addConverter(new ByteArrayToStringBase64()); }
}