Estou tendo problemas para fazer uma chamada de um método por um DataTable de jQuery. Estou fazendo isso com Spring Boot e Angularjs 1.
Esse método contém um parâmetro que é um objeto (uma classe), e estou tentando fazer a chamada mas estou encontrando o seguinte erro:
{“timestamp”:1496935566527,“status”:400,“error”:“Bad Request”,“exception”:“org.springframework.http.converter.HttpMessageNotReadableException”,“message”:“Could not read JSON document: Unexpected character (’=’ (code 61)): Expected space separating root-level values\n at [Source: java.io.PushbackInputStream@43e333c8; line: 1, column: 3]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character (’=’ (code 61)): Expected space separating root-level values\n at [Source: java.io.PushbackInputStream@43e333c8; line: 1, column: 3]”,“path”:"/getRequisicoes"}
Meu RestController:
@RestController(value = "/requisicoes")
public class RequisicaoController {
@Autowired
LogisticaGLGLDocumentosServices logisticaGLGLDocumentosServices;
@Autowired
SistemaUsuariosFiliaisServices sistemaUsuariosFiliaisServices;
@RequestMapping(method = RequestMethod.PUT,
value = "/getRequisicoes",
produces = org.springframework.http.MediaType.APPLICATION_JSON_VALUE,
consumes = org.springframework.http.MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Collection<TblLogisticaGlgldocumentos>> getRequisicoes(@RequestBody final FiltroRequisicao filtroRequisicao) {
Collection<TblLogisticaGlgldocumentos> lista = logisticaGLGLDocumentosServices.load();
return new ResponseEntity<>(lista, HttpStatus.OK);
}
@RequestMapping(method = RequestMethod.PUT, value = "/getFiliaisCooperados", produces = org.springframework.http.MediaType.APPLICATION_JSON_VALUE, consumes = org.springframework.http.MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Collection<TblSistemaUsuariosFiliais>> getFiliaisCooperados(@RequestBody SistemaUsuarios sistemaUsuarios) {
Collection<TblSistemaUsuariosFiliais> lista = sistemaUsuariosFiliaisServices.loadFiliais(sistemaUsuarios);
return new ResponseEntity<>(lista, HttpStatus.OK);
}
Minha classe que recebe os filtros:
public class FiltroRequisicao implements Serializable {
private Integer CodigoSistemaUsuariosFiliais;
private String DataInicial;
private String DataFinal;
private String ChaveDocumento;
public FiltroRequisicao() {
}
public Integer getCodigoSistemaUsuariosFiliais() {
return CodigoSistemaUsuariosFiliais;
}
public void setCodigoSistemaUsuariosFiliais(Integer codigoSistemaUsuariosFiliais) {
CodigoSistemaUsuariosFiliais = codigoSistemaUsuariosFiliais;
}
public String getDataInicial() {
return DataInicial;
}
public void setDataInicial(String dataInicial) {
DataInicial = dataInicial;
}
public String getDataFinal() {
return DataFinal;
}
public void setDataFinal(String dataFinal) {
DataFinal = dataFinal;
}
public String getChaveDocumento() {
return ChaveDocumento;
}
public void setChaveDocumento(String chaveDocumento) {
ChaveDocumento = chaveDocumento;
}
}
Meu js Controller (Angular):
function requisicoesController($scope, $http) {
$scope.listaCooperados = [{}];
$scope.cooperadosSelecionados = [{}];
$scope.filtroRequisicao = {
codigoSistemaUsuariosFiliais: 0,
dataInicial: "",
dataFinal: "",
chaveDocumento: ""
}
$scope.loadTable = function () {
$(document).ready(function () {
$('#tableDocumentos').DataTable({
//"sAjaxSource": "/getRequisicoes",
ajax: {
url: "/getRequisicoes",
contentType: "application/json; charset=utf-8",
dataType: "json",
type: "PUT",
data : JSON.stringify($scope.filtroRequisicao)
},
language: {
url: "//cdn.datatables.net/plug-ins/1.10.15/i18n/Portuguese-Brasil.json",
decimal: ",",
thousands: "."
},
sAjaxDataProp: "",
bDestroy: true,
order: [[0, "asc"]],
aoColumns: [
{mData: "cnpj"},
{
mData: "data", "type": "date", "render": function (data) {
if (data !== null) {
var javascriptDate = new Date(data);
var day = javascriptDate.getDate().toString();
var month = (javascriptDate.getMonth() + 1).toString();
month = ('00' + month).substring(month.length);
var year = javascriptDate.getFullYear().toString();
javascriptDate = day + "/" + month + "/" + year;
return javascriptDate;
} else {
return "";
}
}
},
{mData: "tblGnpessoas.nome"},
{mData: "numero"},
{mData: "serie"},
{mData: "valor", "type": "decimal"}
]
})
});
};
}
angular
.module('app')
.controller('requisicoesController', ['$scope', '$http', requisicoesController]);
Fiz a mesma requisição pelo Postman e ocorreu tudo certo, agora fazendo pela chamada ajax do datatable do jquery não consigo fazer funcionar.