我有一个spring Boot 项目。我有一些xsds在我的项目中。我已经用maven-jaxb 2-plugin生成了类。我已经用this tutorial得到了一个运行的spring boot应用程序的例子。
import org.kaushik.xsds.XOBJECT;
@SpringBootApplication
public class JaxbExample2Application {
public static void main(String[] args) {
//SpringApplication.run(JaxbExample2Application.class, args);
XOBJECT xObject = new XOBJECT('a',1,2);
try {
JAXBContext jc = JAXBContext.newInstance(User.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(xObject, System.out);
} catch (PropertyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但是我关心的是我需要Map模式的所有jaxb类。另外,Spring中是否有一些东西可以让我的任务变得更容易?我已经看过Spring OXM项目,但是它的应用程序上下文是用xml配置的。Sping Boot 中是否有一些东西可以让我开箱即用?任何例子都会很有帮助。
编辑
我尝试了xerx 593的答案,并使用main方法运行了一个简单的测试
JaxbHelper jaxbHelper = new JaxbHelper();
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(XOBJECT.class);
jaxbHelper.setMarshaller(marshaller);
XOBJECT xOBJECT= (PurchaseOrder)jaxbHelper.load(new StreamSource(new FileInputStream("src/main/resources/PurchaseOrder.xml")));
System.out.println(xOBJECT.getShipTo().getName());
它运行得非常好。现在我只需要用 Spring Boot 把它插上。
4条答案
按热度按时间dgsult0t1#
OXM绝对适合你!
Jaxb 2 Marshaller的简单java配置如下所示:
在您的应用程序/服务类中,您可以采用以下方法:
请参阅Jaxb2Marshaller-javadoc和相关的Answer
ojsjcaue2#
如果您只需要
serializing/deserializing
bean和XML,我认为jackson fasterxml
是一个不错的选择:梅文:
参考:https://github.com/FasterXML/jackson-dataformat-xml
j9per5c43#
Sping Boot 非常聪明,只要一点帮助,它就能理解你需要什么。
若要使XML封送/解送工作正常,只需将@XmlRootElement注解添加到类中,将@XmlElement注解添加到字段中,而不使用getter,目标类将自动序列化/反序列化。
下面是DTO示例
以及控制器:
您可以在此处查看完整的代码示例:https://github.com/sergpank/spring-boot-xml
欢迎提出任何问题。
nhaq1z214#
您可以使用
StringSource
/StringResult
来读取/使用spring读取xml源代码