How to use spring to marshal and unmarshal xml?

后端 未结 4 1469
渐次进展
渐次进展 2020-12-07 23:44

I have a spring boot project. I have a few xsds in my project. I have generated the classes using maven-jaxb2-plugin. I have used this tutorial to get a sample spring boot a

4条回答
  •  粉色の甜心
    2020-12-08 00:07

    Spring BOOT is very smart and it can understand what you need with a little help.

    To make XML marshalling/unmarshalling work you simply need to add annotations @XmlRootElement to class and @XmlElement to fields without getter and target class will be serialized/deserialized automatically.

    Here is the DTO example

    package com.exmaple;
    
    import lombok.AllArgsConstructor;
    import lombok.Getter;
    import lombok.NoArgsConstructor;
    import lombok.Setter;
    import lombok.ToString;
    
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import java.io.Serializable;
    import java.util.Date;
    import java.util.Random;
    
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    @Setter
    @XmlRootElement
    public class Contact implements Serializable {
        @XmlElement
        private Long id;
    
        @XmlElement
        private int version;
    
        @Getter private String firstName;
    
        @XmlElement
        private String lastName;
    
        @XmlElement
        private Date birthDate;
    
        public static Contact randomContact() {
            Random random = new Random();
            return new Contact(random.nextLong(), random.nextInt(), "name-" + random.nextLong(), "surname-" + random.nextLong(), new Date());
        }
    }
    

    And the Controller:

    package com.exmaple;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    @RequestMapping(value="/contact")
    public class ContactController {
        final Logger logger = LoggerFactory.getLogger(ContactController.class);
    
        @RequestMapping("/random")
        @ResponseBody
        public Contact randomContact() {
            return Contact.randomContact();
        }
    
        @RequestMapping(value = "/edit", method = RequestMethod.POST)
        @ResponseBody
        public Contact editContact(@RequestBody Contact contact) {
            logger.info("Received contact: {}", contact);
            contact.setFirstName(contact.getFirstName() + "-EDITED");
            return contact;
        }
    }
    

    You can check-out full code example here: https://github.com/sergpank/spring-boot-xml

    Any questions are welcome.

提交回复
热议问题