Transformando objeto JSON para Java

3 respostas
rodrigomelo

Pessoal,

estou usando um MultiActionController para executar algumas actions de crud em um formulário.

O problema que meu metódo nao consegue resolver o objeto JSON que estou passando para ele como parametro. Vejam:

Controller:

import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException;

import br.com.enginex.notifyme.domain.Email;
import br.com.enginex.notifyme.domain.Endereco;
import br.com.enginex.notifyme.domain.Telefone;
import br.com.enginex.notifyme.domain.Usuario;

public class CadastroComplementarController extends MultiActionController {
    private HashMap<String, String> clazzStrMap;
    private String clazzStr;

    protected ModelAndView handleAll(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Usuario usuario = (Usuario) request.getSession().getAttribute("usuario");

        String entityStr = ServletRequestUtils.getStringParameter(request, "entityStr").toLowerCase();
        int index = ServletRequestUtils.getIntParameter(request, "index");
        Object object = request.getParameter("obj");
        
        logger.debug(object);

        clazzStr = clazzStrMap.get(entityStr);

        Class<?> clazz = null;
        try {
            clazz = Class.forName(clazzStr);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Object instanceOfClazz = BeanUtils.instantiateClass(clazz);
        if (instanceOfClazz instanceof Email) {
            Email email = null;
            usuario.getEmails().set(index, email);
        }
        if (instanceOfClazz instanceof Endereco) {
            usuario.getEnderecos().add((Endereco) instanceOfClazz);
        }
        if (instanceOfClazz instanceof Telefone) {
            usuario.getTelefones().add((Telefone) instanceOfClazz);
        }

        return new ModelAndView("ajax_addCadastroCompl", "obj", instanceOfClazz);
    }

    public ModelAndView save(HttpServletRequest request, HttpServletResponse response)
            throws ServletRequestBindingException {
        return null;

    }

    public HashMap<String, String> getClazzStrMap() {
        return clazzStrMap;
    }

    public void setClazzStrMap(HashMap<String, String> clazzStrMap) {
        this.clazzStrMap = clazzStrMap;
    }

    public String getClazzStr() {
        return clazzStr;
    }

    public void setClazzStr(String clazzStr) {
        this.clazzStr = clazzStr;
    }
}

JavaScript

function ajax_addCadastroComplCrudActions() {
    $('.editSave').click(cadastroComplCrudActions.editSave);
}

var cadastroComplCrudActions = {
    addRemove : function() {
        $('#cadastroComplActionParam').val($(this).attr('title'));
        $(this).parents().filter('form').submit();
        return false;
    },
    editSave : function() {
        var anchor = this;
        var index = $('.editSave').index(anchor);
        var obj = $('.editSave').eq(index).parents().filter('fieldset').serializeArray();
        
        //debug
        console.log({ tipo: obj['usuarioForm.usuario.emails[' + index + '].tipo'], endereco: obj['usuario.emails[' + index + '].endereco'] });
        
        $.post('cadastroCompl.html', {
            action : 'edit',
            entityStr : anchor.title,
            index : index,
            obj : obj
        }, function(data) {
            alert(data);
        }, 'json');
        return false;
    }
};

Já tenntei algumas alternativas como implementar um method resolver para o JSON, mas tb nao consegui.

Estou usando Spring nao anotado, 2.5.6.

Muito Obrigado pela ajuda.

3 Respostas

C

Boa tarde

Então rodrigo, acesse esse site http://www.json.org/, lá na opção java existe varias API que são utilizadas para manipular JSON, eu aqui na empresa uso a org.json.

Falou.

rodrigomelo

Primeiro muito obrigado Caio pela contribuicao.

Eu na verdade já estou utilizando uma dessas libs quando transformo meu objeto Java -> JSON.

O problema ocorre quando capturo um Object JSON e quero transformá-lo em Java.

A saída do “request.getParamerter(“jsonObject”)” eh sempre [Object object]. Ele destrói meu objeto JSON.

Há a possibilidade de eu mandar como string. Mas gostaria de encontrar uma saída para resolver o objeto JSON.

Obrigado novamente!

EderBaum

Opa

O topico é antigo, mas acho que ainda vale responder pois acho que ficou no vazio.

Use esta biblioteca aqui -> http://code.google.com/p/google-gson/

Gson g = new Gson()ç
Pessoa p = g.fromJson("{nome:'Carlos', Sobrenome:'Silva'}", Pessoa.class)
Criado 7 de dezembro de 2009
Ultima resposta 20 de nov. de 2010
Respostas 3
Participantes 3