Por que estes json não funcionam?

1 resposta
B

Fiz um web service de teste e estou testando com SoapUI

http://www.soapui.org/

Eu quero salvar uma pessoa

Seus atributos são nome, idade, empresa

Modo 1:

Envio este Json e acontece o seguinte:

{"nome":"michel adriano medeiros","idade":55,"empresa":{"id_empresa":1,"nome":"nenhuma"}}

Error:

Informações: [EL Warning]: 2015-12-19 15:28:56.903--UnitOfWork[telefone removido])--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: org.postgresql.util.PSQLException: ERROR: null value in column "empresa" violates not-null constraint Detalhe: Failing row contains (2, michel adriano medeiros, 55, null). Error Code: 0 Call: INSERT INTO PESSOA (IDADE, NOME) VALUES (?, ?) bind => [2 parameters bound] Query: InsertObjectQuery(br.com.alga.modelo.Pessoa@6048f73b) Advertência: StandardWrapperValve[Jersey REST Service]: Servlet.service() for servlet Jersey REST Service threw exception org.postgresql.util.PSQLException: ERROR: null value in column "empresa" violates not-null constraint Detalhe: Failing row contains (2, michel adriano medeiros, 55, null).

Modo 2:

Envio este Json e acontece o seguinte:

{"nome":"michel adriano medeiros","idade":55,"empresa":1}

Erro:

Informações: conteudo {"nome":"michel adriano medeiros","idade":55,"empresa":1} Advertência: StandardWrapperValve[Jersey REST Service]: Servlet.service() for servlet Jersey REST Service threw exception java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 57 path $.empresa

Code:

@Path("pessoas")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class PessoaRecurso implements Serializable {

    @Path("inserirPessoa")
    @POST
    public Response adiciona(String conteudo) {
        System.out.println("conteudo " + conteudo);
        
        
        Pessoa pessoas = new Gson().fromJson(conteudo, Pessoa.class);
        System.out.println("pessoas nome " + pessoas.getNome());
        System.out.println("pessoas idade " + pessoas.getIdade());
        System.out.println("pessoas id empresa " + pessoas.getEmpresa());
        System.out.println("----------------------------------------------------");
        Pessoa pessoa = new PessoasDAO().salvarPessoa(pessoas);

        return Response.ok(pessoa)
                .status(200)
                .header("Access-Control-Allow-Origin", "*")
                .header("Access-Control-Allow-Headers",
                        "origin, content-type, accept, authorization")
                .header("Access-Control-Allow-Credentials", "true")
                .header("Access-Control-Allow-Methods",
                        "GET, POST, PUT, DELETE, OPTIONS, HEAD")
                .header("Access-Control-Max-Age", "1209600")
                .build();
    }
}

    public Pessoa salvarPessoa(Pessoa pessoas) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("exemploPU");
        EntityManager em = emf.createEntityManager();

        em.getTransaction().begin();
        em.persist(pessoas);
        em.getTransaction().commit();

        System.out.println("salvo");
        return pessoas;
    }



@XmlRootElement
@Entity
public class Pessoa implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id_pessoa;

    private String nome;

    private int idade;

    @PrimaryKeyJoinColumn(name = "empresa", referencedColumnName = "id_empresa")
    @ManyToOne(optional = false)
    private Empresa empresa;
    
//    @JoinColumn(name = "empresa", referencedColumnName = "id_empresa")
//    @ManyToOne(optional = false, fetch = FetchType.EAGER)
//    private Empresa empresas;
    
    @JoinTable(name = "pessoa_filho",
            joinColumns = {
                @JoinColumn(name = "pessoa", referencedColumnName = "id_pessoa")},
            inverseJoinColumns = {
                @JoinColumn(name = "filho", referencedColumnName = "id_filho")})
    @ManyToMany
    private List<Filho> filhosLista;



@XmlRootElement
@Entity
public class Empresa implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id_empresa;
    
    private String nome;

1 Resposta

H

Por algum motivo o campo empresa está chegando vazio.

O código que você postou está pela metade.

Salve ele em algum local e poste o link para que possamos analisá-lo.

Criado 19 de dezembro de 2015
Ultima resposta 21 de dez. de 2015
Respostas 1
Participantes 2