Java JAXB-Marshaller写入系统输出,但不写入XML文件
我目前正在开发一个旅行服务,我们必须使用JAXB编组将用户信息写入XML文件。在Tomcat服务器上运行应用程序时,我在文本框中键入信息并单击“注册”,XML格式在控制台中写入,但实际上并没有写入XML文件。到目前为止,我的“accounts.xml”位于“src/main/resources”目录中。这是到目前为止我的控制器信息。我不确定它为什么不会写入XML文件:Java JAXB-Marshaller写入系统输出,但不写入XML文件,java,xml,spring-mvc,jaxb,marshalling,Java,Xml,Spring Mvc,Jaxb,Marshalling,我目前正在开发一个旅行服务,我们必须使用JAXB编组将用户信息写入XML文件。在Tomcat服务器上运行应用程序时,我在文本框中键入信息并单击“注册”,XML格式在控制台中写入,但实际上并没有写入XML文件。到目前为止,我的“accounts.xml”位于“src/main/resources”目录中。这是到目前为止我的控制器信息。我不确定它为什么不会写入XML文件: @Controller public class AccountController { @RequestMapping
@Controller
public class AccountController {
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String registerPage(Locale locale, Model model) {
return "register";
}
@RequestMapping(value = "/home", method = RequestMethod.POST)
public String register(@RequestParam("name") String name, @Validated User user, Model model) throws JAXBException, IOException{
Account account = new Account();
account.setName(name);
account.setEmail("email");
account.setPassword("password");
try {
File file = ResourceUtils.getFile("classpath:accounts.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Account.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
jaxbMarshaller.marshal(account, file);
jaxbMarshaller.marshal(account, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
model.addAttribute("name", user.getName());
return "user";
}
}
提交信息时,我的控制台输出如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<account>
<email>email</email>
<name>testName</name>
<password>password</password>
</account>
电子邮件
测试名
密码
任何帮助都将不胜感激 File File=ResourceUtils.getFile(“classpath:accounts.xml”);是一个“java.io.File”对象,它引用类路径的文件accounts.xml部分。这是部署在tomcat中的war文件的一部分
您需要使用File File=new File(“/tmp/accounts.xml”)中的File对象如果您确实想这样做,您应该确保您的WAR已部署,并查看accounts.xml是否可写。看看这个: 此外,我看到您在每个请求中都创建了一个JAXBContext。JAXB规范说: 为了避免创建JAXBContext实例所涉及的开销,可以使用 鼓励JAXB应用程序重用JAXBContext实例。一 抽象类JAXBContext的实现需要 线程安全,因此,应用程序中的多个线程可以共享 相同的JAXBContext实例
你应该将JAXBLACKE移动到静态字段,因为只需要一个实例。
HI,如果有任何答案解决了你的问题,请考虑通过点击复选标记来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。