NumberFormatException Em ResourceController não pode lançar a partir de String para Integer

Kevin Valdez:

Eu tenho esse controlador com um método get que recive 3 paramaters como java.lang.Integer

@GetMapping(path = Constantes.CONSULTAR_NODO_SUCESOR)
    public ConsultarNodoSucesorResponse consultarNodoSucesor(@RequestHeader HttpHeaders headerRequest,
                                                             @RequestParam(required = false) Integer idArbol, 
                                                             @RequestParam(required = false) Integer nivelFormulario, 
                                                             @RequestParam(required = false) Integer idSucesor,
                                                             @RequestParam(required = false) String rutaRelacion, 
                                                             @RequestParam(required = false) String tipoRelacion, 
                                                             HttpServletResponse headerResponse) {
        ConsultarNodoSucesorRequest request = new ConsultarNodoSucesorRequest(idArbol, nivelFormulario, idSucesor,
                rutaRelacion, tipoRelacion);
        return service.consultarNodoSucesor(headerRequest, request, headerResponse);
    }

Quando cosuming o servidor está retornando o código 400 para o mau pedido, erro completa abaixo

Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: \"4111111111\

Estou mandando na paramter idArbolo valor 4111111111, mas isso não vai funcionar, por outro lado, se eu enviar em que os valores mesmos paramters como 1044444444 Ele funciona muito bem.

Por que isso é uma coisa? o que é o valor máximo de umInteger

Nikolas:

Ao contrário o valor 1044444444o valor 4111111111é demasiado grande para o int(e, portanto, Integero tipo de dados), por conseguinte, é entendido como String. O valor transborda do intervalo permitido para o número inteiro.

Veja tipos de dados primitivos :

int : Por padrão, o tipo de dados int é um 32-bit inteiro assinado complemento de dois, que tem um valor mínimo de -231 e um valor máximo de 231-1.

Você pode perguntar por Primavera se comporta assim. Este é o tipo de conversão característica de várias anotações de Primavera onde Stringé o valor padrão:

Alguns argumentos do método controlador anotados que representam entrada de pedido com base-String (tais como @RequestParam, @RequestHeader, @PathVariable, @MatrixVariable, e @CookieValue) pode requerer a conversão de tipo se o argumento é declarado como algo diferente de cadeia.

Para esses casos, a conversão de tipo é aplicada automaticamente com base nos conversores configurados. Por padrão, tipos simples ( int, long, Datee outros) são suportados. Você pode personalizar a conversão de tipo através de uma WebDataBinder(ver DataBinder) ou por registrar Formatadores com o FormattingConversionService. Veja Primavera formatação de campo .

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=362917&siteId=1
Recomendado
Clasificación