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 idArbol
o 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
Ao contrário o valor 1044444444
o valor 4111111111
é demasiado grande para o int
(e, portanto, Integer
o 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
,Date
e outros) são suportados. Você pode personalizar a conversão de tipo através de umaWebDataBinder
(verDataBinder
) ou por registrar Formatadores com oFormattingConversionServic
e. Veja Primavera formatação de campo .