我想编程一个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能够自动解决此问题。甚至在这种情况下,也不需要headersparams参数,因此您可以编写:

@RequestMapping(value = "/changeXML", method = RequestMethod.GET)

甚至更短:

@GetMapping("/changeXML")

08-07 04:01