String[] to Biginteger

4 respostas
F

O objeto que está retornando para mim vem da seguinte linha:

String token = headers.getRequestHeader("token").get(0);

Ele vem como um biginteger, mas não consigo converte-lo:
Se ele já vem como eu poderia forçar uma conversão?

4 Respostas

Rodrigo_Sasaki

como você tentou fazer?

Paulo_Silveira

Na verdade o token já está vindo como String. Quem o gerou fez como BigInteger[] mas chamou o toString em vez de fazer direitinho. Ferramentas como o GSon vai cuspir o json corretamente.

acho que sua implementacao de jax-rs ja deveria fazer isso. se nao eh padrao, deve ser facil criar um conversor, que gere uma String[] ou Collection do outro lado. Poste o codigo do metodo do servidor que devolve esse BigInteger[] e suas anotacoes.

F

Paulo Silveira:
Na verdade o token já está vindo como String. Quem o gerou fez como BigInteger[] mas chamou o toString em vez de fazer direitinho. Ferramentas como o GSon vai cuspir o json corretamente.

acho que sua implementacao de jax-rs ja deveria fazer isso. se nao eh padrao, deve ser facil criar um conversor, que gere uma String[] ou Collection do outro lado. Poste o codigo do metodo do servidor que devolve esse BigInteger[] e suas anotacoes.


Opa, grato pela ajuda galera.

Na realidade eu retorno um usuário onde um dos atributos é um BigInteger[]. O problema é que ao resgatar esses valores ele mostra um BigInteger[] conforme a figura, mas eu não consigo efetuar a conversão.

Geração dos valores

public Usuario autenticar(String userId, String userPass) throws BusinessException{
		UserLDAP userLdap = usuarioService.autenticar(userId, userPass);
		System.out.println(userLdap.getNomeCompleto());
		Usuario user = new Usuario();
		user.setToken(userLdapToUsuario(userLdap));
		return user;
	}
	
	private BigInteger[] userLdapToUsuario(UserLDAP userLdap){
		Criptografia cripto = new Criptografia();
		String campos = cripto.prepararCampos(userLdap.getUid());
		
		BigInteger[] token = cripto.criptografar(campos);
		return token;
	}

Por fim o método que irá retornar o conteúdo:

@GET
	@Produces("application/json")
	public Usuario autenticar(@Context HttpHeaders headers) {
		String userId = headers.getRequestHeader("userId").get(0);
		String userPass = headers.getRequestHeader("userPass").get(0);

		Usuario user = null;
		try {
			LoginBC login = new LoginBC();
			user = login.autenticar(userId, userPass);
			user.setCodErro(CodigoMensagensEnum.COD_OK.getCod());
		} catch (BusinessException e) {
			user = new Usuario();
			user.setCodErro(CodigoMensagensEnum.COD_OBJ_NAO_ENCONTRADO.getCod());
			user.setMensagem(MensagensEnum.MSG_ERRO_OBJ_NAO_ENCONTRADO.getMsg());
		} catch (NamingException e) {
			user = new Usuario();
			user.setCodErro(CodigoMensagensEnum.COD_ERRO_CONTEXTO.getCod());
			user.setMensagem(MensagensEnum.MSG_ERRO_CONTEXTO.getMsg());
		}
		return user;
	}
Paulo_Silveira

Voce vai precisar implementar um MessageBodyWriter para o seu tipo Usuario (ou talvez para BigInteger[] e anotar o getter, nao sei se funciona).

Mais info:
http://cxf.apache.org/docs/jax-rs-data-bindings.html

Ah! E eu usaria excecoes simples para indicar problemas, em vez de setar no objeto Usuario

Criado 20 de agosto de 2012
Ultima resposta 20 de ago. de 2012
Respostas 4
Participantes 3