Spring 4.1.5 MVC @RequestParam(required = false, value = somevalue) терпит неудачу, если параметр отсутствует

У меня есть контроллер spring mvc, который обслуживает запросы веб-службы с несколькими параметрами запроса. Все параметры помечены required = false. Тем не менее, если в запросе параметр недоступен,

@RequestMapping(value = "/service/deployNew", method = RequestMethod.POST)
@ResponseBody public ResponseEntity<DeploymentId>  deploy(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false, value = "abc") String abc, @RequestParam(required = false, value = "xyz") String xyz, @RequestParam(required = false, value = "uvw") String uvw,)  throws Exception;

я вижу ошибку

required string parameter 'param' is not present

Если я даю пустое значение для параметра, все работает нормально, как показано ниже. Параметры abc и xyz имеют пустое значение, но я все равно его передаю.

curl -i -X POST -H Accept:application/json "http://localhost:8080/Test/service/deploy.do?abc=&xyz=&uvw=somevalue"

Если я удалю любой из вышеуказанных параметров, он выдаст ошибку.

curl -i -X POST -H Accept:application/json "http://localhost:8080/Test/service/deploy.do?uvw=somevalue"

Мой сервис используется несколькими клиентами с одной конечной точкой, из-за чего иногда присутствуют некоторые параметры. Мне нужно обработать все сценарии. Есть идеи?


person Upen    schedule 04.01.2016    source источник
comment
Можете ли вы показать нам фактический код просто для здравого смысла?   -  person Beau Grantham    schedule 05.01.2016
comment
Может ли быть так, что для значения у вас должно быть имя параметра, а не какое-то значение? фрагменты кода были бы очень полезны   -  person Jake C.    schedule 05.01.2016
comment
Как говорит @BeauGrantham - ценится фрагмент кода (вероятно, только подпись метода и аннотация), плюс я бы также добавил трассировку стека...   -  person dcsohl    schedule 05.01.2016
comment
Думаю, ваш заголовок Content-Type должен быть application/x-www-form-urlencoded.   -  person Manuel Vieda    schedule 05.01.2016
comment
Может быть, попробуйте убрать cURL из уравнения и просто опубликовать очень простую html-форму. Мне интересно, является ли ваша проблема проблемой cURL, а не проблемой контроллера spring mvc.   -  person headlikearock    schedule 05.01.2016
comment
Опубликуйте минимально воспроизводимый пример. Я не могу воспроизвести вашу ошибку, и имена параметров, которые вы опубликовали, не совпадают. Трудно понять, что именно вы запускаете.   -  person Sotirios Delimanolis    schedule 05.01.2016
comment
@ManuelVieda Я пробовал с Content-Type application/x-www-form-urlencoded. Неудачно.   -  person Upen    schedule 05.01.2016
comment
@headlikearock опробовал html-форму. Та же ошибка.   -  person Upen    schedule 05.01.2016


Ответы (1)


Попробуйте использовать defaultValue

@RequestParam(required = false, defaultValue = "somevalue")

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html#defaultValue--

person user2669657    schedule 04.01.2016
comment
я пробовал это. Не работает, я все еще вижу ошибку, параметр Required String 'abc' отсутствует - person Upen; 05.01.2016
comment
Я думаю, что есть проблема, когда параметр String. docs.spring. io/spring/docs/current/spring-framework-reference/ Type conversion is applied automatically if the target method parameter type is not String попробуйте поместить эти свойства String в один POJO с @ModelAttribute и изменить подпись для метода, я знаю, что это не идеальное решение, но может работать. - person user2669657; 05.01.2016
comment
Я использовал defaultValue, и я все еще получаю сообщение об ошибке. - person David Jesus; 27.01.2021