GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Validação de duas variáveis

Tags: #<Tag:0x00007fb864a13050>

Boa tarde pessoal,

Estou tentando fazer a seguinte validação em uma API:

  1. Tenho duas variáveis: String op e Long tel.
  2. op é obrigatória, tel opcional.
  3. quero validar ambas para que caso recebam algo que não seja um carácter numérico, elas lancem um erro.

Já tentei de várias formas, porém quando eu implemento a validação ela dá o seguinte resultado:

  1. O String opCode passa caracteres não numéricos.
    ou
  2. tudo vai certinho, porém quando eu lanço a seguinte tentativa: op (1) e tel (bb), ela dá um erro.

Colocarei o código abaixo.

String retorno = "operatorCode: " + opCode;
		 
		
		
		try {
			Long opCodeNumber = Long.valueOf(opCode);
		} catch(NumberFormatException e) {
			return "Formato invalido. O telefone deve ser numerico, ex: /statusportabilidadefone/1234";
		}
		
		
		
		if(telefone != null && StringUtils.isNumeric(telefone.toString())) {
			
			return "operadorCode: " + opCode + " telefone: " + telefone;
		} else if( telefone != null && !StringUtils.isNumeric(telefone.toString())) {
			throw new NumberFormatException ("Formato invalido. O telefone deve ser numerico, ex: /statusportabilidadefone/1234");
			
		} else{
			return retorno;
		}

Desde já agradeço pela ajuda…

O problema está mais para trás. Se telefone é Long, vai dar erro logo que lhe tentes atribuir algum valor não numérico.
Mostra o código onde é feita a atribuição do valor a telefone.

import org.apache.commons.lang3.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/cocada")
public class Cocada {

@GetMapping(value = {"/{operatorCode}","/{operatorCode}/{telefone}"})
public String teste(@PathVariable("operatorCode") String opCode, @PathVariable(required=false) Long telefone) {
	
	
		String retorno = "operatorCode: " + opCode;
		 
		
		
		try {
			Long opCodeNumber = Long.valueOf(opCode);
		} catch(NumberFormatException e) {
			return "Formato invalido. O telefone deve ser numerico, ex: /statusportabilidadefone/1234";
		}
		
		
		
		if(telefone != null && StringUtils.isNumeric(telefone.toString())) {
			
			return "operadorCode: " + opCode + " telefone: " + telefone;
		} else if( telefone != null && !StringUtils.isNumeric(telefone.toString())) {
			throw new NumberFormatException ("Formato invalido. O telefone deve ser numerico, ex: /statusportabilidadefone/1234");
			
		} else{
			return retorno;
		}

Olá @Askanin , tudo bem?

Para a ajuste:

  • Atribua o valor do telefone recebido a uma String (ao invés de long no método) e posteriormente insira numa variável long conforme o código abaixo!

Veja o exemplo abaixo!

public String teste(String opCode, String telefone) {

  /* Para Teste */
  telefone = "A19";

  try {
    Long lTelefone = Long.valueOf(telefone);
  } catch (NumberFormatException e) {
    System.out.println("Formato invalido. O telefone deve ser numerico, ex: /statusportabilidadefone/1234");
  } 

O que ocorre é que como seu método já recebe um Long a tentativa de conversão acontece antes de entrar no método e por isso há o erro. Faça esse ajuste e vai funcionar!

:smile:

Bom trabalho!

1 Curtida

Obrigado @Kau.Splett :smiley:

1 Curtida
//