Eu quero programar uma chamada de API REST para atualizar uma String de uma classe, que contém o nome do arquivo de um arquivo xml.
Eu estou tentando fazê-lo com uma chamada GET ... Mas pode ser uma opção mais adequada.
Esta é uma amostra 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);
}
Tudo que eu quero é o atributo configFile atualizado. Mas ainda assim, tudo que eu sempre fin é o seguinte erro: Esta página contém os seguintes erros: Erro na linha 1 na coluna 1: Documento está vazio Abaixo está uma renderização da página até o primeiro erro.
Meu xml posso garantir que ele seja bem e ... mesmo se eu colocar essa outra url, http: // localhost / changeXML configFile = c% C3% B1dlvm% C3% B1ldfmv? Eu ainda tenho o mesmo erro.
alguém poderia fornecer alguma informação sobre isso? Desde já, obrigado!
Dentro de sua @RequestMapping
anotação, você colocar o MediaType.APPLICATION_XML_VALUE
valor para o produces
parâmetro. Isso significa que você informe o seu navegador que a resposta irá conter XML.
No entanto, se você der uma olhada nas respostas, você está retornando de texto simples no lugar. Seu navegador provavelmente tenta analisar isso como XML, mas não pode, e gera um erro.
A solução é dizer ao seu navegador que você está retornando de texto simples, que é o text/plain
tipo de mídia ou MediaType.TEXT_PLAIN
na Primavera:
@RequestMapping(
value = "/changeXML",
params= {"configFile"},
produces = {MediaType.TEXT_PLAIN}, // Change this
headers = "Accept=application/xml",
method = RequestMethod.GET)
Neste caso, você provavelmente pode deixar fora o produces
parâmetro inteiramente, como a Primavera vai ser capaz de resolver automaticamente este. Ainda mais, o headers
e params
parâmetros não são necessários nem neste caso, assim que você poderia simplesmente escrever:
@RequestMapping(value = "/changeXML", method = RequestMethod.GET)
Ou ainda mais curto:
@GetMapping("/changeXML")