Spring 4.0.x JSON / Ajax HTTP / 1.1 406 não aceitável
Estou trabalhando com o Spring 4.0.5.RELEASE, o Spring MVC apenasConfiguração Java
Eu tenho no meu pom.xml o seguinte:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
Where <jackson.version>1.9.13</jackson.version>
Estou usando a configuração padrão do Spring sobre JSON. Em alguns@Controller
Eu tenho o seguinte:
@RequestMapping(value="/getjsonperson",
method=RequestMethod.GET,
produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Person getJSONPerson(){
logger.info("getJSONPerson - getjsonperson");
return PersonFactory.createPerson();
}
@RequestMapping(value="/getperson.json", method=RequestMethod.GET)
public @ResponseBody Person getPersonJSON(){
logger.info("getPerson - getpersonJSON");
return PersonFactory.createPerson();
}
E funciona bem. Eu posso ver no navegador o valor JSON retornado. Até aqui tudo está bem.
Agora eu quero integrar o Spring MVC + (JSON AJAX)
Eu tenho este tutorial como referênciaSpring MVC: Ajax e JQuery
Ok, eu tenho o seguinte sobre JSON com AJAX (trabalhando através de uma caixa de seleção ou combinação para carregar um segundo conjunto ou coleção)
Nota: O URL é estático, mesmo que eu use apenas/spring-utility/facturaajax/findallproductobycategoria.htm
o problema persiste
$("#categoria").change(function(event){
var json = {"id" : $(this).find("option:selected").val(), "nombre" : $(this).find("option:selected").text() };
$.ajax({
url: "http://localhost:8080/spring-utility/facturaajax/findallproductobycategoria.htm" ,
data: JSON.stringify(json),
type: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(products) {
alert("all fine!!!!");
}
});
//event.preventDefault();
});
Sobre o controlador Eu tenho o seguinte para lidar com o processo ajax
@RequestMapping(value="/findallproductobycategoria.htm",
method=RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Set<Producto> findAllProductoByCategoria(@RequestBody Categoria categoria){
logger.info("findAllProductoByCategoria: {}", categoria.toString());
return this.fakeMultipleRepository.findAllProductoByCategoria(categoria.getId());
}
Mesmo se eu usarheaders="Accept=application/json"
ouheaders="Content-Type=application/json"
o problema persiste.
Os POJOs são serializáveis
public class Categoria implements Serializable {
private static final long serialVersionUID = 5655804710111228325L;
public class Producto implements Serializable {
private static final long serialVersionUID = -6362590479124787529L;
O problema: Quando altero o valor do meu elemento html select, sempre recebo oHTTP / 1.1 406 Não Aceitável (veja as duas imagens anexas)
BTW: O lado do servidor nunca é chamado.
Eu já li outras postagens no SO. Praticamente todos eles mencionam Jackson e são baseados no Spring3.2.x.
Mesmo se eu adicionar o seguinte, o problema persistirá
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>${jackson.version}</version>
</dependency>
O que está faltando? Obrigado.