Обновить путь к файлу xml с помощью вызова rest

#java #spring #spring-boot #spring-mvc

#java #spring #весенняя загрузка #spring-mvc

Вопрос:

Я хочу запрограммировать вызов 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() amp;amp; !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ñdlvmñldfmv У меня все еще та же ошибка.

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

Ответ №1:

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

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

Решение состоит в том, чтобы сообщить вашему браузеру, что вы возвращаете обычный текст, который является text/plain типом носителя, или 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")