Estou começando a estudar AngularJS, até aí tudo bem, a chamada do JSON está funcionando perfeitamente, testado passando o JSON direto no PostMan essa parte beleza, agora que estou tentando chamar ele usando AngularJS não consigo por nada desse mundo não saio do erro 415, alguém tem alguma ideia que eu faço de errado pra não funcionar to testando fazer uma chamada simples por GET só pra ver se consigo fazer alguma chamada funcionar.
No log do Google Chrome ele só coloca isso não da nenhum erro aparentemente mais tá voltando 415 como eu não tivesse passando o Content-Type:
angular.js:12011 GET http://localhost:8080/usuario/1 415 ()(anonymous function) @ angular.js:12011sendReq @ angular.js:11776serverRequest @ angular.js:11571processQueue @ angular.js:16383(anonymous function) @ angular.js:16399$eval @ angular.js:17682$digest @ angular.js:17495$apply @ angular.js:17790bootstrapApply @ angular.js:1761invoke @ angular.js:4718doBootstrap @ angular.js:1759bootstrap @ angular.js:1779angularInit @ angular.js:1664(anonymous function) @ angular.js:31763l @ jquery.min.js:4fireWith @ jquery.min.js:4ready @ jquery.min.js:4S @ jquery.min.js:4
angular.js:12011 XHR finished loading: GET "http://localhost:8080/usuario/1".(anonymous function) @ angular.js:12011sendReq @ angular.js:11776serverRequest @ angular.js:11571processQueue @ angular.js:16383(anonymous function) @ angular.js:16399$eval @ angular.js:17682$digest @ angular.js:17495$apply @ angular.js:17790bootstrapApply @ angular.js:1761invoke @ angular.js:4718doBootstrap @ angular.js:1759bootstrap @ angular.js:1779angularInit @ angular.js:1664(anonymous function) @ angular.js:31763l @ jquery.min.js:4fireWith @ jquery.min.js:4ready @ jquery.min.js:4S @ jquery.min.js:4
esse erro é relacionado a request com content type errado ou nenhum.
no developer tools do chrome vc pode ver na aba “Network” qual foi o request e quais headers vc esta enviando.
se estiver errado, ai vc tem que corrigir seu javascript/angular
se estiver certo é possivel que o backend esteja com alguma dificuldade de entender o request.
isso é integração entre 2 sistemas via REST, o erro pode estar de qq um dos lados.
Então pior pelo que eu vi ele está passando certo, que no caso só precisaria o Content-Type: application/json.
Request URL:http://localhost:8080/usuario/1
Request Method:GET
Status Code:415
Remote Address:[::1]:8080
Response Headers
view source
Content-Type:application/json;charset=UTF-8
Date:Wed, 14 Sep 2016 17:49:07 GMT
Transfer-Encoding:chunked
Request Headers
view source
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods:GET, POST, PUT, DELETE
Access-Control-Allow-Origin:*
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:8080
Referer:http://localhost:8080/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
X-Requested-With:XMLHttpRequest
Ah! esquece realmente ainda não ta passando, não tinha visto ainda no debug que tinha um preview mostrando o JSON de retorno, não sei mais que faço que esse header não vai.
{"timestamp":1473875347386,"status":415,"error":"Unsupported Media Type","exception":"org.springframework.web.HttpMediaTypeNotSupportedException","message":"Content type 'null' not supported","path":"/usuario/1"}
Minha chamada no AngularJS é praticamente essa, tem alguma ideia? @peczenyj
<script>
angular.module("suiteESCWeb", ["ngMessages"]);
angular.module("suiteESCWeb").controller("usuarioCtrl", function ($scope, $http) {
$scope.app = "Lista Telefonica";
$scope.usuario = [];
var config = {headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin' : '*',
'Access-Control-Allow-Methods' : 'GET, POST, PUT, DELETE',
'X-Requested-With': 'XMLHttpRequest',
'Access-Control-Allow-Headers' : 'Origin, X-Requested-With, Content-Type, Accept'
}
};
var carregarUsuario = function () {
$http.get("http://localhost:8080/usuario/1", config).success(function (data) {
console.log(data);
$scope.usuario = data;
}).error(function (data, status) {
$scope.message = "Aconteceu um problema: " + data;
});
};
carregarUsuario();
});
Eu consegui resolver @peczenyj era uma coisa muito besta na verdade era o Java mesmo estava errado.
@RestController
@RequestMapping(value = "/usuario")
public class UsuarioController {
@Autowired
UsuarioService usuarioService;
@RequestMapping(value = "/{codigoUsuario}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Response buscaPorCodigoUsuario(@PathVariable Integer codigoUsuario) throws Exception {
return usuarioService.buscaPorCodigoUsuario(codigoUsuario);
}
Estava assim não tinha necessidade do consumes certo já que era só um GET direto:
@RequestMapping(value = "/{codigoUsuario}", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)