Обновите путь к XML-файлу с помощью вызова rest - PullRequest
4 голосов
/ 29 марта 2019

Я хочу запрограммировать вызов API 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, я могу заверить, что он будет в порядке, и ... даже если я добавлю этот другой URL, http://localhost/changeXML?configFile=c%C3%B1dlvm%C3%B1ldfmv У меня все еще будет та же ошибка.

Может ли кто-нибудь предоставить некоторую информациюоб этом?Заранее спасибо!

1 Ответ

1 голос
/ 29 марта 2019

В вашей аннотации @RequestMapping вы указали значение MediaType.APPLICATION_XML_VALUE для параметра produces.Это означает, что вы сообщаете браузеру, что ответ будет содержать XML.

Однако, если вы посмотрите на ответы, вы вернете простой текст вместо.Ваш браузер, вероятно, пытается проанализировать это как XML, но не может, и выдает ошибку.

Решение состоит в том, чтобы сообщить браузеру, что вы возвращаете простой текст, который является типом text/plain media,или MediaType.TEXT_PLAIN в Spring:

@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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...