I have the following Endpoint where you get the name of the city and state in the URI:
@RequestMapping(value= "/clima/{nomeCidade}/{ufCidade}/agora", method = {RequestMethod.GET, RequestMethod.OPTIONS} , produces="application/json" )
public ResponseEntity<Clima> getClimaAgoraByNomeCidade(@PathVariable(value = "nomeCidade") String nomeCidade, @PathVariable(value = "ufCidade") Estado ufCidade) throws JSONException, ParseException, java.text.ParseException {
JSONObject detCidade = new JSONObject();
ClimaTempoAPI ct = new ClimaTempoAPI();
String newNomeCidade = nomeCidade.toLowerCase().replace(" ", "%20");
String weatherEndpoint = "/api/v1/locale/city?name=" + newNomeCidade + "&state=" + ufCidade.toString();
Long idCidade;
Integer findRegCidade = climaRepository.findCountCidade(ufCidade, nomeCidade);
// Se a cidade existir no banco
if(findRegCidade != 0) {
// Atribuir o idCidade da cidade e fazer requisi�ao no banco
idCidade = climaRepository.findTop1IdCidade(ufCidade, nomeCidade);
// Se nao existir a cidade no banco, gravar a cidade e fazer a requisicao
} else {
try {
detCidade = ct.RequestWeather(weatherEndpoint);
} catch (IOException e) {
e.printStackTrace();
}
CidadeCT cidadeCT = new CidadeCT();
cidadeCT.setId((long) System.currentTimeMillis());
cidadeCT.setCodPais(detCidade.get("country").toString().trim());
cidadeCT.setNomeCidade((String) detCidade.get("name"));
idCidade = (Long) detCidade.get("id");
cidadeCT.setIdCidade(idCidade);
cidadeCT.setEstado(Enum.valueOf(Estado.class, detCidade.get("state").toString()));
cidadeCTRepository.save(cidadeCT);
}
return getClimaAgora(idCidade);
}
The ct.RequestWeather () method is as follows:
public JSONObject RequestWeather(String weatherEndpoint) throws IOException, JSONException, ParseException {
String appToken = "&token=xxx";
URL weatherDomain = new URL("http://apiadvisor.climatempo.com.br" + weatherEndpoint + appToken);
return ConnectionJson.returnJson(weatherDomain, true);
}
And my AJAX call on the Front-End .js is as follows:
var uf = $("#colWeather #selectState").val();
var city = $("#colWeather #selectCity").val();
//Send a request to the ClimaTempo Endpoint
$.ajax({
url: host + '/clima/' + city + '/' + uf + '/agora',
type: 'GET',
contentType: "application/json",
async: true
}).done(function (JSONReturn) {
//Algumas ações aqui
});
When the city name has NO accent, it can normally pick up current weather data. But city with an accent (for example: Avaí-SP, Arujá-SP) I'm getting a 500 error:
{
"timestamp":1530038926783,
"status":500,
"error":"Internal Server Error",
"exception":"org.json.simple.parser.ParseException",
"message":"No message available",
"path":"/clima/Altin%C3%B3polis/SP/agora"
}
What am I doing wrong that city with an accent is always giving trouble?
DETAIL: LOCALHOST is working perfectly! But when I upload to the server these cities with an accent do not work.