Strust2类型从字符串到字节数组的转换错误?
Strust2 type conversion error from String to byte array?
Struts 2 具有隐式类型转换,负责处理用户输入的参数类型转换,例如整数、字符串、双精度、布尔值等。
但我的要求是将富文本区域输入转换为字节数组,为此我创建了一个自定义类型转换器 class.
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;
}
}
}
在模型 class 中,我在 属性
的 setter 上指定了以下注释
@TypeConversion(converter="org.package.name.StringToByteArrayConverter")
public void setVarName(byte[] varName) {
this.varName = varName;
}
同样的注释也适用于 getter 方法。
现在一切似乎都很好,我在 Action 方法中获得了正确的数据。但是在 jsp 上显示数据时,我得到了一些带有原始内容的额外符号。
例如。用户输入是:你叫什么名字?
它显示在 jsp : ¬íur[B¬óøTàxpwhat is your name ?
谁有什么想法,我哪里错了?
首先在字节到字符串的处理中指定正确的字符集:
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...
.
Struts 2 具有隐式类型转换,负责处理用户输入的参数类型转换,例如整数、字符串、双精度、布尔值等。 但我的要求是将富文本区域输入转换为字节数组,为此我创建了一个自定义类型转换器 class.
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;
}
}
}
在模型 class 中,我在 属性
的 setter 上指定了以下注释@TypeConversion(converter="org.package.name.StringToByteArrayConverter")
public void setVarName(byte[] varName) {
this.varName = varName;
}
同样的注释也适用于 getter 方法。 现在一切似乎都很好,我在 Action 方法中获得了正确的数据。但是在 jsp 上显示数据时,我得到了一些带有原始内容的额外符号。
例如。用户输入是:你叫什么名字? 它显示在 jsp : ¬íur[B¬óøTàxpwhat is your name ?
谁有什么想法,我哪里错了?
首先在字节到字符串的处理中指定正确的字符集:
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...
.