【问题标题】:Spring rest service to return multiple entity classes as xml response using @RestControllerSpring rest服务使用@RestController将多个实体类作为xml响应返回
【发布时间】:2021-08-20 10:44:36
【问题描述】:

我们如何在spring rest服务中返回多个实体类作为XML响应?

示例:我需要如下回复

<GetEmployeeById>
            <Response>
                <Status>0</Status>
                <Message>Data found</Message>
            </Response>
            <Data>
                <Employee>
                    <Id> 2 </Id>
                    <Name> Mani M </Name>
                    <Job> SOftware Developer </Job>
                    <Salary> 40000 </Salary>
                </Employee>
            </Data>         
        </GetEmployeeById>

这里,Response 和 Employee 是独立的实体。我的代码收到以下 XML 响应。这里的问题是,我在响应节点中获取响应节点,在员工节点中获取员工节点。

<GetEmployeeById>
   <Response>
      <Response>
         <Status>0</Status>
         <Message>Data found</Message>
      </Response>
   </Response>
   <Employee>
      <Employee>
         <Id>2</Id>
         <Name>Mani M</Name>
         <Job>SOftware Developer</Job>
         <Salary>12000</Salary>
      </Employee>
   </Employee>
</GetEmployeeById>

以下是我将两个实体类组合在一起的 java 类。

@XmlRootElement (name="GetEmployeesById")
public class GetEmployeesById implements Serializable{

    
    private static final long serialVersionUID = 1L;
    
    private List<Employee> Employee = new ArrayList<Employee>();
    
    private List<Response> Response = new ArrayList<Response>();

    public List<Employee> getEmployee() {
        return Employee;
    }

    public void setEmployee(List<Employee> employee) {
        Employee = employee;
    }

    public List<Response> getResponse() {
        return Response;
    }

    public void setResponse(List<Response> Response) {
        Response = Response;
    }
    
    
}

请帮我解决这个问题。

【问题讨论】:

    标签: java xml hibernate spring-mvc spring-data-jpa


    【解决方案1】:

    这里的问题是List&lt;CustomResponse&gt;,因为它是List,父标签&lt;/Response&gt;代表列表,子标签&lt;/Response&gt;代表List中的元素

    为了实现您想要的负载,Response 不能是 List,而必须是 CustomResponse

    至于您的数据节点,您可能想尝试如下创建一个新类

    @XmlRootElement(name = "Data")
    public class Data implements Serializable {
       private static final long serialVersionUID = 1L;
       
       @XmlElement(name = "Employee")
       private List<Employee> employees
    }
    

    然后,您可以在 GetEmployeesById 类中将 List&lt;Employee&gt; 替换为 Data

    【讨论】:

      【解决方案2】:

      重命名字段和吸气剂

      // private List<Employee> Employee = new ArrayList<Employee>();
      private List<Employee> Data = new ArrayList<Employee>();
      

      或在字段或吸气剂中添加注释@XmlElement(name="Data")(不确定)

      并更改字段(也是吸气剂)

      // private List<Response> Response = new ArrayList<Response>();
      private Response Response = new Response();
      

      【讨论】:

      • 根据您的建议修改,现在 Data 节点将作为父节点和子节点出现。 2Kumar M初级软件开发人员12000 data> 0找到数据
      • stackoverflow.com/questions/19194567/… 这里有一些提示,我会尝试@XmlVariableNode("name") 但我目前无法验证它
      • 感谢您的帮助
      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多