【问题标题】:How to pass @RequestBody list of object in XML如何在 XML 中传递 @RequestBody 对象列表
【发布时间】:2019-03-26 09:50:48
【问题描述】:

我有一个带有 PostMapping 的休息应用程序:

public List<Job> jobs = new ArrayList<Job>()
@PostMapping
public JobList handleXMLPostRequest (@Valid @RequestBody JobList newJobs)
    {
        for(Job joba : newJobs.getJobList())
        jobs.add(joba);

        for (Job joba : jobs)
            System.out.println(joba.toString());

    System.out.println("\n");
    return newJobs;
    }

对象作业:

@XmlRootElement(name = "job")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Job {
    private int id;
    private String type;
    private String user;
    private String device;
    private int amount;
    //getters and setters }

对象作业列表:

@XmlRootElement(name = "jobs")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class JobList {
    public ArrayList<Job> jobList = new ArrayList<>();
    //getter setter
}

尝试发布下一个 XML:

<jobs>
    <job>
        <id>10</id>
        <type>print</type>
        <user>user1</user>
        <device>device1</device>
        <amount>10</amount>
    </job>
    <job>
        <id>11</id>
        <type>scan</type>
        <user>user1</user>
        <device>device1</device>
        <amount>10</amount>
    </job>
</jobs>

我需要将读成JobList,其中每个都是这个列表中的Job对象。

当我运行我的示例并将此 xml 列表传递给它时,它返回空列表。 如何正确设置这个 JobList?

【问题讨论】:

  • 添加@PostMapping(consumes = {MediaType.APPLICATION_XML_VALUE})
  • 仍然返回空列表。此外,当我尝试只传递一个 结构并且在参数中是 Job 作业而不是 JobList newJobs 时,它被很好地序列化为 Job 对象

标签: java xml spring spring-boot jaxb


【解决方案1】:

试试这个,

JobsList.java

@XmlRootElement(name = "jobs")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class JobList {

    private ArrayList<Job> jobList;

    @XmlElement(name="job")
    public ArrayList<job> getJobList(){
        return jobList;
    }

    public void setJobList(ArrayList<Job> jobList){
        this.jobList = jobList;
    }
}

Job.java

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Job {

    private int id;
    private String type;
    private String user;
    private String device;
    private int amount;

    @XmlElement
    public int getId(){
        return id;
    }

    public void setId(int id){
        this.id = id;
    }

    @XmlElement
    public String getType(){
        return type;
    }

    public void setType(String type){
        this.type = type;
    }

    @XmlElement
    public String getUser(){
        return user;
    }

    public void setUser(String iser){
        this.user = user;
    }

    @XmlElement
    public String getDevice(){
        return device;
    }

    public void setDevice(String device){
        this.device = device;
    }

    @XmlElement
    public int getAmount(){
        return amount;
    }

    public void setAmount(int amount){
        this.amount = amount;
    }

}

【讨论】:

  • 都是关于 jobList 中的错误注释,我没有制作 @XmlElement(name="job") 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
相关资源
最近更新 更多