所以我有这段代码:
<xs:element name="Headers">
<xs:annotation>
<xs:documentation>Headers Object</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="content-type" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
当我创建类Headers时,我得到了content-type元素:
@XmlElement(name = "content-type")
protected String contentType;
我使用Gson将对象转换为json:
"headers": [{
"contentType": "application/x-www-form-urlencoded",
}],
我需要的是获取我在xsd文件中使用的contentType元素,所以我的问题是是否有机会获取@XmlElement名称值并在转换而不是变量名称中使用它。我也尝试了xstream库,但得到了相同的结果。
提前致谢。
答案 0 :(得分:1)
是的,这是可能的。 对于这个,不需要修改xsd来添加@SerializedName(&#34; content-type&#34;),如果xsd非常大,这也不是时间。
PS:我正在使用Gson API。
GsonBuilder gson = new GsonBuilder();
gson.setFieldNamingStrategy(new CustomFieldNamePolicy());
CustomFieldNamePolicy类可以定义为:
public class CustomFieldNamePolicy implements FieldNamingStrategy{
@Override
public String translateName(Field paramField) {
Annotation annotationName = null;
if(null != (annotationName = paramField.getAnnotation(XmlElement.class))){
return ((XmlElement) annotationName).name();
}else if(null != (annotationName = paramField.getAnnotation(XmlAttribute.class))){
return ((XmlAttribute)annotationName).name();
}
return paramField.getName();
}
}