【问题标题】:There is null value in field when parse xml from request by jaxb?从 jaxb 的请求中解析 xml 时字段中有空值?
【发布时间】:2018-10-18 08:34:08
【问题描述】:

我在 spring+maven+jaxb 上有应用程序。 有休息控制器

@RequestMapping(value = "/risks", method = RequestMethod.POST)
    public void addRisks(@RequestBody RiskMetric risks) {
        risksService.addriks(risks);
    }

需要像这样将xml解析为实体风险

<Risks>
  <test>111</test>
  <param>
    <type>testType</type>
  /param>
  <currency>UYU</currency>
</Risks>

但是,在创建的风险实体中,字段类型为空。风险实体:

@XmlRootElement(name = "Risks")
@XmlAccessorType(XmlAccessType.FIELD)
public class Risks implements Serializable {
    @XmlElement
    private String test;

    @XmlElement
    @XmlJavaTypeAdapter(ParamAdapter.class)
    private Param param;

    @XmlJavaTypeAdapter(CurrencyAdapter.class)
    @XmlElement
    private Currency currency;
    ...constructors and getters\setters..

ParamAdapter 是:

public class ParamAdapter extends XmlAdapter<String, Param> {

    @Override
    public Param unmarshal(String v) throws Exception {
        return new Param(v);
    }

    @Override
    public String marshal(Param v) throws Exception {
        StringBuilder result = new StringBuilder();
        result.append(v.getType());
        return result.toString();
    }
}

和 Param - 类是:

public class Param implements Serializable {

    @XmlElement
    private String type;
...construcors and getters and setters..
}

我需要为 Param 类创建其他适配器还是有其他方法可以解决这个问题?

附言在调试流程下是访问解组方法,输入字符串参数是“\n” - 空字符串

【问题讨论】:

  • 为什么还需要ParamAdapter?如果没有@XmlJavaTypeAdapter(ParamAdapter.class),它应该可以正常工作。
  • 那么您要解析的 xml 是什么(修复 xml,缺少&lt;)?根据您的适配器,您似乎正在尝试解析这种东西:&lt;param&gt;testType&lt;/param&gt; 所以类型只是字符串而不是内部&lt;type/&gt; 元素。

标签: xml spring jaxb


【解决方案1】:

删除了所有 faster.xml 依赖项并添加了 jaxb。问题解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多