se eu tiver um mapeamento de solicitação semelhante ao seguinte:
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}
E então chame esta solicitação com:
http://example.com/test?i=
Recebo a mensagem de erro
Falha ao converter o valor do tipo 'java.lang.String' para o tipo 'int'; a exceção aninhada é java.lang.NumberFormatException: Para string de entrada: "" '
Posso resolver isso impedindo o cliente javascript de enviar parâmetros vazios ou aceitando valores de string e analisando apenas se eles não estiverem em branco.
ATUALIZAÇÃO : as versões posteriores do Spring agora implementam o comportamento originalmente desejado.
Acabei de testar isso no spring 4.3.5 e descobri que o comportamento agora vai de fato transformar o valor nulo no valor padrão sem aumentar a NumberFormatException
, portanto; meu mapeamento original agora funciona bem.
Não tenho certeza de qual versão da primavera essa mudança de comportamento foi feita.
fonte
String
tipo fornecido acidentalmente . user902383, isso é correto, embora para um valor inteiro eu preferisse que um valor nulo / vazio usasse o defaultValue.Respostas:
Você pode alterar o tipo @RequestParam para um Integer e torná-lo desnecessário. Isso permitiria que sua solicitação fosse bem-sucedida, mas seria nula. Você pode defini-lo explicitamente com seu valor padrão no método do controlador:
Removi o defaultValue do exemplo acima, mas você pode querer incluí-lo se espera receber solicitações em que não está definido de forma alguma:
fonte
Você pode manter o tipo primitivo definindo o valor padrão, no seu caso, basta adicionar a propriedade "required = false" :
PS Esta página da documentação do Spring pode ser útil: Tipo de anotação RequestParam
fonte
/test?i=
e, comoi
está vazio, tem o valor padrão.defaultValue
foi fornecido,required == false
implicitamentedefaultValue
, não terá efeito.Você pode definir RequestParam, usando a classe genérica Integer em vez de int, isso resolverá seu problema.
fonte
Você também pode fazer algo assim -
fonte
Isso foi considerado um bug em 2013: https://jira.spring.io/browse/SPR-10180
e foi corrigido com a versão 3.2.2. O problema não deve ocorrer em nenhuma versão depois disso e seu código deve funcionar perfeitamente.
fonte