[Não Resolvido]Dúvida JSON + Spring

Bom dia,

estou tendo um simples problema para montar um Objeto com composição pelo JSON passando ao Spring…
é o seguinte tenho as seguintes classes :

public class ReceitaBean 
{
	private long codigo;
	private String titulo;
	private String descricao;
	private List<String> ingredientes;
	private Categoria categoria;
	private String preparo;
	private int rendimento;
	private int tempo;
	private String imagem;
	private Usuario autor;
	private Calendar data;
	private List<String> tags;

       //Setter+/Getters
}

Como podem ver, esta classe possui um campo composto: Categoria:

public class Categoria 
{
	private long codigo;
	private String tipo;
	private String descricao;

       //Setters+Getters
}

E em meu front-end, monto um JSON com os dados para a classe Receita, porém ao tentar enviar a composição da “Categoria”, o Spring me da um exception durante o POST:

[color=red]Exception:[/color]

Invalid property 'categoria[codigo]' of bean class [br.com.ggdio.receitas.bean.ReceitaBean]: Property referenced in indexed property path 'categoria[codigo]' is neither an array nor a List nor a Map;

[color=blue]Este é o JSON:[/color]

//JSON
		var dados = 
		{
				"titulo" : titulo,
				"descricao": descricao,
 				"ingredientes" : ingredientes,
 				"categoria" : categoria,
 				"preparo" : preparo,
 				"rendimento" : rendimento,
 				"tempo": tempo,
 				"imagem": imagem,
 				"tags" : tags
		};

OBS: os valores para o JSON estão todos em variáveis do javascript(titulo,descricao,ingredientes…) e o valor para a composição da categoria é o seguinte:

var categoria = 
		{
			"codigo" : 0,
			"tipo" : tipoCategoria,
			"descricao" : null
		};

Alguém tem idéia do que pode estar acontecendo ? o JSON esta correto, não há nada de errado em meus beans e controllers.

Deduzindo pela msg de erro,tenta colocar List<Categoria> pra ver se rola.

Então, o problema é que não tenho nenhum List de Categoria em meu bean.

É somente uma referencia a categoria msm:

...
private Categoria categoria
...

Então, o problema é que não tenho nenhum List de Categoria em meu bean.

É somente uma referencia a categoria msm:

... private Categoria categoria ... [/quote]

Eu sei disso,é apenas um teste inicial :smiley:

Então, o problema é que não tenho nenhum List de Categoria em meu bean.

É somente uma referencia a categoria msm:

... private Categoria categoria ... [/quote]

Eu sei disso,é apenas um teste inicial :smiley: [/quote]

Fiz isso, agora passou sem exception, porém não carregou nenhum valor, ficou tudo NULL no LIST de teste.

Não é possível, não consigo entender o que há de errado, fiz o teste com uma composição super simples, com um valor só e mesmo assim não da certo:

[color=darkblue]Classe composta:[/color]

public class ComposicaoTeste 
{
	private Teste teste;

	public Teste getTeste() {
		return teste;
	}

	public void setTeste(Teste teste) {
		this.teste = teste;
	}

}

[color=darkblue]A classe que é referenciada na composição de cima:[/color]

public class Teste 
{
	private String valorA;
	
	public String getValorA() {
		return valorA;
	}
	public void setValorA(String valorA) {
		this.valorA = valorA;
	}
}

[color=orange]JSON[/color]

var teste = 
		{
			"teste" : 
			{
				"valorA" : "A"
			}	
		};

[color=red]E mesmo assim, o Spring me da Exception:[/color]

Invalid property 'teste[valorA]' of bean class [br.com.ggdio.receitas.test.ComposicaoTeste]: Property referenced in indexed property path 'teste[valorA]' is neither an array nor a List nor a Map; returned value was [A]

Alguém já sofreu com isso também ?

Ninguém ?

É, aparentemente não tem solução, vou ter que partir para a gambiarra mesmo, vou passar valor por valor pelo request via GET, já que não consigo usar o JSON pelo Spring.

Desculpa a demora para responder, mas a solução é:

ao invés de abrir um novo objeto passe o valor da variavel que tem usando o ponto e entre aspas, por exemplo:

 teste = { "teste.valorA" : "A" }; 

isso resolveu meu problema e espero que te ajude tb
Abraço

1 curtida