hybris - Impex 导出:多值属性中的冒号被双反斜杠转义 - 如何删除此行为?
问题描述
Hybris:6.3.0.0-SNAPSHOT(行为与6.3.0.21相同)
在导出 impex 时,我们注意到导出非多值类型属性与导出多值类型属性时的差异。
导出不带冒号的 String 属性数据时,可以将非多值属性导出为Experts,而将多值属性导出为Experts|Hybris。
当使用冒号(例如 URL)导出带有字符串属性数据的类型时,冒号用双反斜杠转义(仅适用于多值)。非多值属性可以导出为https://experts.hybris.com,而多值属性可以导出为https\://experts.hybris.com如果只有 1 个值或https\://如果有 2 个值,experts.hybris.com|https\://help.hybris.com 。
如何阻止导出从冒号逃逸?有没有我可以重写的方法来改变这种行为?我想将结果更改为https://experts.hybris.com|https://help.hybris.com或" https://experts.hybris.com "|" https://help.hybris。 com ”。
商业案例:我们想从导出的 impex 中复制 URL,但 URL 包含双反斜杠。导出的 impex 并不意味着重新导入。
注意 #`: URL 存储在一个集合中(例如 Product.newAttribute,其中 newAttribute 是具有字符串的自定义类型的集合)。因此,Impex 标头看起来像“INSERT_UPDATE Product;newAttribute(data)”
注释#2:(更新:没用)目前,我正在检查是否可以使用 CSVCellDecorator;这仅用于进口。
注释 #3:目前,我正在检查 AbstractSpecialValueTranslator 是否可行。
解决方案
对于这种特殊情况,我创建了一个新的转换器,扩展了 AbstractValueTranslator。然后,我实现了 exportValue 方法,加入了字符串数据(它们是 URL),而不转义它们。
public String exportValue(final Object value) throws JaloInvalidParameterException
{
String joinedString = "";
if (value instanceof Collection)
{
final Collection valueCollection = (Collection) value;
if (!valueCollection.isEmpty())
{
final ArrayList<CustomType> list = (ArrayList<CustomType>) valueCollection;
final StringJoiner joiner = new StringJoiner("|");
for (final CustomType customType : list)
{
// data is a URL
joiner.add(customType.getData());
}
// value would be something like "https://experts.hybris.com|https://help.hybris.com"
joinedString = joiner.toString();
}
}
return joinedString;
}
参考:
推荐阅读
- asp.net - 来自受保护的 WebAPI 的响应是登录到我的帐户 Microsoft 页面的 HTML
- java - 使用 Spring 框架的 WebSocketClient 时如何修复 NoClassDefFoundError
- python - Python中的拼字游戏单词查找器
- dynamics-crm - 通过合作伙伴门户在 Dynamics CRM 365 中创造机会
- pandas - 如何使用我的日期时间进行预测(随机森林模型)
- amazon-cloudformation - Amplify 不知从何处获取了一个 appClientId,现在无法更新堆栈
- regex - 恰好匹配一个正则表达式项
- c - 在 C 中不使用 malloc 将局部变量保存在堆上(使用 sbrk 或 brk)
- styled-components - 样式化的组件和范围
- c++ - 二维向量的 MPI_Gather