我想编程一个api rest调用来更新一个类的字符串,其中包含一个xml文件的文件名。
我正在尝试通过GET调用来实现...但是可能会有一个更合适的选择。
这是一个URL示例:http://localhost/changeXML?configFile=Configuration.xml
@RequestMapping(value = "/changeXML",params= {"configFile"}, produces = { MediaType.APPLICATION_XML_VALUE},
headers = "Accept=application/xml",method = RequestMethod.GET)
public ResponseEntity<?> updateConfigFile(@RequestParam("configFile") String file) {
File f = new File(file);
System.out.println(f);
if(f.exists() && !f.isDirectory()) { //file is updated if and only if it exisits
System.out.println("FICHERO SI QUE EXISTEEEEE");
this.configFile=file;
return new ResponseEntity<String>("XML configuration file has been updated to: "+file, HttpStatus.OK);
}
System.out.println("PETITION");
//otherwise path is not going to be updated
return new ResponseEntity<String>("Unexisting XML", HttpStatus.OK);
}
我想要的只是更新了configFile属性。但是,我所发现的只是以下错误:
此页面包含以下错误:
第1行第1行出现错误:文档为空
以下是直到第一个错误的页面呈现。
我的xml我可以保证它是好的,并且...即使我把这个其他网址http://localhost/changeXML?configFile=c%C3%B1dlvm%C3%B1ldfmv
我仍然有同样的错误。
有人可以提供一些有关此的信息吗?提前致谢!
最佳答案
在@RequestMapping
批注中,已将MediaType.APPLICATION_XML_VALUE
参数的produces
值放入。这意味着您告诉浏览器该响应将包含XML。
但是,如果您查看响应,则将返回纯文本。您的浏览器可能会尝试将其解析为XML,但无法解析,并引发错误。
解决方案是告诉浏览器您将返回纯文本,即text/plain
媒体类型或Spring中的MediaType.TEXT_PLAIN
:
@RequestMapping(
value = "/changeXML",
params= {"configFile"},
produces = {MediaType.TEXT_PLAIN}, // Change this
headers = "Accept=application/xml",
method = RequestMethod.GET)
在这种情况下,您可以完全放弃
produces
参数,因为Spring能够自动解决此问题。甚至在这种情况下,也不需要headers
和params
参数,因此您可以编写:@RequestMapping(value = "/changeXML", method = RequestMethod.GET)
甚至更短:
@GetMapping("/changeXML")