当前位置: 首页 > 知识库问答 >
问题:

解编组时无法获取以大写字母开头的参数值

阎丰羽
2023-03-14

我试图使用解组来创建一个使用xml字符串的对象。这是我正在使用的代码。但是我无法得到一个参数的值(内存响应),这不是在camelcase,其余的参数正在得到正确的设置。

早些时候,我没有使用jsonproperty注释,我在谷歌上搜索了这个问题,并了解了这个注释。但是,在使用注释后,也会出现错误。MemResponse字段仍获取空值。

JAXBContext jc = JAXBContext.newInstance(Transaction.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StreamSource streamSource = new StreamSource(new StringReader(content));
JAXBElement<Transaction> jaxbElement = unmarshaller.unmarshal(streamSource, Transaction.class);

事务类如下

public class Transaction
{
    private String transType;

    private String xmlDate;

    private String source;

    private String xmlVersion;

    @JsonProperty("MemResponse")
    private MemResponse MemResponse;
}

这是Mem响应类

public class MemResponse
{
    @JsonProperty("DependantDetail")
    private DependantDetail[] DependantDetail;

    @JsonProperty("Telephone")
    private Telephone Telephone;

    @JsonProperty("Address")
    private Address[] Address;

    @JsonProperty("MemberDetail")
    private MemberDetail MemberDetail;
}

这是我的sml弦

<Transaction>\n  
    <xmlVersion>1</xmlVersion>\n
    <xmlDate>25/11/2011</xmlDate>\n
    <source>MACROMOBI</source>\n
    <transType>MEMDETAIL</transType>\n
    <MemResponse>\n    
        <MemberDetail>\n      
            <joinDate>01/07/2007</joinDate>\n
            <leftDate>31/01/2008</leftDate>\n
            <employerCode></employerCode>\n
            <depCount>2</depCount>\n
            <langPref>ENG</langPref>\n
            <nextMemberNo/>\n
            <nextPlanCode/>\n
        </MemberDetail>\n
        <DependantDetail>\n      
            <depNum>01</depNum>\n
            <initials>G</initials>\n
            <depTitle>MR</depTitle>\n
            <gender>M</gender>\n
            <maritalStatus>S</maritalStatus>\n
            <joinDate>01/07/2007</joinDate>\n
            <leftDate>31/01/2008</leftDate>\n
            <relation>SELF</relation>\n
            <depType>PM</depType>\n
        </DependantDetail>\n
        <DependantDetail>\n      
            <depNum>02</depNum>\n
            <initials>S</initials>\n
            <depTitle>MRS</depTitle>\n
            <birthDate>20/11/1944</birthDate>\n
            <gender>F</gender>\n
            <maritalStatus>S</maritalStatus>\n
            <joinDate>01/07/2007</joinDate>\n
            <benefitStart>01/07/2007</benefitStart>\n
            <leftDate>31/01/2008</leftDate>\n
        </DependantDetail>\n
        <Telephone>\n      
            <contType>MVWORK</contType>\n
            <dialCode>+</dialCode>\n
            <dialNum>5</dialNum>\n
            <smsFlag/>\n
        </Telephone>\n
        <Address>\n      
            <contType>PM</contType>\n
            <addr02>MORNINGSIDE</addr02>\n
            <addr04/>\n
            <town>MUTARE</town>\n
            <postCode>0000</postCode>\n
        </Address>\n
        <Address>\n      
            <contType>RM</contType>\n
            <addr02>MORNINGSIDE</addr02>\n
            <addr03>MUTARE</addr03>\n
            <addr04/>\n
            <postCode>0000</postCode>\n
        </Address>\n
    </MemResponse>\n
</Transaction>\n

共有1个答案

汤乐家
2023-03-14

您不能使用@JsonProperty反序列化事务对象,因为您正在处理XML,并且@JsonProperty特定于JSON。

相反,在事务类上放置@XmlRootElement注释,在所有字段上放置@XmlElement注释。下面是您的事务类的外观,我将让您对MemResponse和其他类进行相同的更改:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Transaction {
    @XmlElement
    private String transType;

    @XmlElement
    private String xmlDate;

    @XmlElement
    private String source;

    @XmlElement
    private String xmlVersion;

    @XmlElement(name = "MemResponse")
    private MemResponse memResponse;
}

如果元素名与字段名匹配,则不必在@XmlElement注释中指定name。但是,作为一个例子,我给memSolutions字段提供了一个初始小写字母,以适应字段的Java命名约定,并指定在注释中使用元素名称MemSolutions

 类似资料:
  • 我正在JSBin上玩ReactJS框架。 我注意到,如果我的组件名称以小写字母开头,它就不起作用。 例如,以下内容不会呈现: 但只要我用替换它就会呈现。 我不能用小字母开始标签有什么原因吗?

  • 问题内容: 我正在使用JSBin上的ReactJS框架。 我注意到,如果我的组件名称以小写字母开头,那么它将不起作用。 例如,以下内容不呈现: 但是,一旦我替换为,它就会渲染。 我不能以小写字母开头的标签有原因吗? 问题答案: 在JSX中,小写标签名称被认为是HTML标签。但是,带点号(属性访问器)的小写标记名称不是。 参见HTML标签与React组件。 编译为(html标记) 编译为 编译为

  • 我有这个正则表达式: 搜索: 替换为: 这将把所有单词的第一个字母替换成大写字母。例如:

  • 我在大学学习Java,我需要写一个静态int countCapitals(String s)方法,返回字符串s中有多少个单词以大写字母开头。 大写字母是UPPERCASE_LETTER类型或TITLECASE_LETTER类型的字符(Character)。单词是由一个或多个空格、字符、符号或标点符号分隔的字母或数字序列。 New.countCapitals("亲爱的朋友们,你们好!这里—以大写字母

  • 大家好,我希望这个程序能够对大写字母进行编码,而不使用其他字符,并通过输出传递它们。例如“你好,世界!”运行程序“URYY\d_YQ!”后应变为我得到的是Yluhreylbowjwboerylqdxk而不是“URYY\dyq!”这就是我应该得到的。如果有人能让我知道我做错了什么,我将不胜感激。提前谢谢。

  • null 我对解析和的最佳猜测如下。此regex似乎将所有输入计算为: