Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Strust2从字符串到字节数组的类型转换错误?_Java_Jsp_Struts2_Type Conversion_Interceptorstack - Fatal编程技术网

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

Java Strust2从字符串到字节数组的类型转换错误?,java,jsp,struts2,type-conversion,interceptorstack,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

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方法。 现在一切似乎都很好,我在行动方法中得到了正确的数据。但是,当在jsp上显示数据时,我得到了一些带有原始内容的额外符号

用户输入是:你叫什么名字? 它显示在jsp上:你叫什么名字


任何人都知道,我错了什么?

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

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…

嗨,Andrea Ligios,Thansk,以获得快速响应。我尝试了UTF-8编码,但仍然得到相同的错误。是的,我尝试了UTF-8以及Charset.defaultCharset(),但在这两种情况下,输出是相同的:(我还可以检查什么来解决这个问题,请提出建议。@dpilwal您似乎仍在使用
ByteArrayOutputStream
。请参阅此答案中的
convertToString
方法。您是否将此字符串存储在某个位置?从何处获取它?我必须将其存储在DB中,但现在我正在从浏览器输入(textarea)获取它。)并发送回浏览器。