java - Strust2从字符串到字节数组的类型转换错误?

标签 java jsp struts2 type-conversion interceptorstack

Struts 2 具有隐式类型转换,它负责处理用户输入的参数类型转换,例如int、string、double、boolean 等。 但我的要求是将富文本区域输入转换为字节数组,为此我创建了一个自定义类型转换器类。

public class StringToByteArrayConverter extends StrutsTypeConverter{

    @Override
    public Object convertFromString(Map context, String[] value, Class arg2) {
        String val = value[0];
        return val.getBytes() ; 
    }

    @Override
    public String convertToString(Map context, Object value) {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
            ObjectOutputStream os;
            try {
                os = new ObjectOutputStream(out);
                os.writeObject(value);
                return new String(out.toByteArray());
            } catch (IOException e) {           
                e.printStackTrace();
                return null;                    
            }
    }
}

在模型类中,我在属性的 setter 上指定了以下注释

@TypeConversion(converter="org.package.name.StringToByteArrayConverter")
public void setVarName(byte[] varName) {
    this.varName = varName;
}

同样的注释也适用于 getter 方法。 现在一切看起来都很好我在 Action 方法中获得了正确的数据。但是,当在 jsp 上显示数据时,我得到了一些带有原始内容的额外符号。

例如。用户输入是:你叫什么名字? 它显示在 jsp 上: Øíur[BØóøTàxp你叫什么名字?

任何人有任何想法,我错了什么?

最佳答案

首先在字节到字符串处理中指定正确的字符集:

val.getBytes();        // wrong
val.getBytes("UTF-8"); // right

假设您正在使用 UTF-8。否则,只需输入您正在使用的字符集,但从不使用val.getBytes();,它将采用平台默认字符集,该字符集可能与您应用的字符集不同,创建转换错误和工件,就像您现在遇到的那样。

那么ObjectOutputStream并不能说服我。尝试使用简单的

@Override
public String convertToString(Map context, Object value) {
    try {            
        return new String((byte[]) value, "UTF-8");
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

并最终添加错误使用的日志记录,例如:if (value instanceof byte[]).. else LOG.warn...

关于java - Strust2从字符串到字节数组的类型转换错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35406176/

相关文章:

java - 仅在完全写入并关闭后才从 HDFS 读取文件

java - 飞溅不会去主要 Activity

java - 从 JSP 运行 java 主类

java - 有什么方法可以在不更改 tomcat 配置的情况下为 UTF-8 编码 URL 中的特殊字符和其他字符

java apache tomcat 没有检测到 jsp 文件,即使它存在

java - Spring Data Neo4J 存储库 findAll() 导致 nullpointerexception

jsp - Struts2 JSP 图

java - Hibernate 和 Apache Struts2 - 事务未成功启动

java - Struts 2 - 当第二个操作与表单一起使用时,在操作之间传递参数会丢失

Java正则表达式字符串匹配(like和not like)