从 Java 自定义剩余控件中的多值字段获取 JSON
Get JSON from multi-value field in Java custom rest control
我有一个用 Java 编写的自定义休息控件。一切都适用于字符串字段,但不适用于多值字符串字段。我的代码 returns
[值 1、值 2、值 3...]”。请注意,值周围没有逗号。在网页上,输出如下所示:
如果我能在值周围加上逗号,前端框架就可以轻松解析它。
我试图解析字段中的值并正确设置格式,但似乎无法正确设置。
第一组代码适用于字符串。二是尝试为多值领域工作。
如有任何帮助,我们将不胜感激。
writer.startProperty("chgTitle");
writer.outStringLiteral(String.valueOf(columnValues.get(0)));
writer.endProperty();
writer.startProperty("plpAffected");
Object tmpObj = columnValues.get(5);
if (tmpObj instanceof Vector) {
String[] copyArr = new String[((Vector) tmpObj).size()];
((Vector) tmpObj).copyInto(copyArr);
writer.outStringLiteral(String.valueOf(copyArr));
} else {
}
writer.endProperty();
我会推荐一种稍微不同的方法。我喜欢强制我的 JSON 结构在可能出现多值情况的任何地方使用数组。看起来您也在使用 Philippe Riand's specialized JSON writer,所以我假设是。
以下是我将如何攻击它:
writer.startProperty("chgTitle");
writer.outStringLiteral(String.valueOf(columnValues.get(0)));
writer.endProperty();
writer.startProperty("plpAffected");
Vector<?> tmpVec = Util.getValueAsVector(columnValues.get(5));
writer.startArray();
for ( Object ob : tmpVec ) {
writer.startArrayItem();
// assuming String contents
writer.outStringLiteral(String.valueOf(ob));
writer.endArrayItem();
}
writer.endArray();
writer.endProperty();
为了包装返回的 columnValues
,我使用 a Java equivalent of my SSJS getValueAsVector
helper function。它检查 Vector
或 ArrayList
,我碰巧几乎只使用它们;如果不是,它将把它推到一个新的 Vector
中。这是该方法的样子,
public static Vector<?> getValueAsVector(Object obj) {
if(obj instanceof java.util.Vector){
return (Vector<?>) obj;
}else if( obj instanceof ArrayList ) {
List<?> o = (List<?>) obj;
Vector<Object> tmpVec = new Vector<Object>();
for(int i=0;i<o.size();i++){
tmpVec.add(o.get(i));
}
return tmpVec;
}else {
Vector<Object> tmpVec = new Vector<Object>();
tmpVec.add(obj);
return tmpVec;
}
}
我有一个用 Java 编写的自定义休息控件。一切都适用于字符串字段,但不适用于多值字符串字段。我的代码 returns
[值 1、值 2、值 3...]”。请注意,值周围没有逗号。在网页上,输出如下所示:
如果我能在值周围加上逗号,前端框架就可以轻松解析它。
我试图解析字段中的值并正确设置格式,但似乎无法正确设置。
第一组代码适用于字符串。二是尝试为多值领域工作。
如有任何帮助,我们将不胜感激。
writer.startProperty("chgTitle");
writer.outStringLiteral(String.valueOf(columnValues.get(0)));
writer.endProperty();
writer.startProperty("plpAffected");
Object tmpObj = columnValues.get(5);
if (tmpObj instanceof Vector) {
String[] copyArr = new String[((Vector) tmpObj).size()];
((Vector) tmpObj).copyInto(copyArr);
writer.outStringLiteral(String.valueOf(copyArr));
} else {
}
writer.endProperty();
我会推荐一种稍微不同的方法。我喜欢强制我的 JSON 结构在可能出现多值情况的任何地方使用数组。看起来您也在使用 Philippe Riand's specialized JSON writer,所以我假设是。
以下是我将如何攻击它:
writer.startProperty("chgTitle");
writer.outStringLiteral(String.valueOf(columnValues.get(0)));
writer.endProperty();
writer.startProperty("plpAffected");
Vector<?> tmpVec = Util.getValueAsVector(columnValues.get(5));
writer.startArray();
for ( Object ob : tmpVec ) {
writer.startArrayItem();
// assuming String contents
writer.outStringLiteral(String.valueOf(ob));
writer.endArrayItem();
}
writer.endArray();
writer.endProperty();
为了包装返回的 columnValues
,我使用 a Java equivalent of my SSJS getValueAsVector
helper function。它检查 Vector
或 ArrayList
,我碰巧几乎只使用它们;如果不是,它将把它推到一个新的 Vector
中。这是该方法的样子,
public static Vector<?> getValueAsVector(Object obj) {
if(obj instanceof java.util.Vector){
return (Vector<?>) obj;
}else if( obj instanceof ArrayList ) {
List<?> o = (List<?>) obj;
Vector<Object> tmpVec = new Vector<Object>();
for(int i=0;i<o.size();i++){
tmpVec.add(o.get(i));
}
return tmpVec;
}else {
Vector<Object> tmpVec = new Vector<Object>();
tmpVec.add(obj);
return tmpVec;
}
}