#spring #spring-mvc
#весна #spring-mvc
Вопрос:
Пожалуйста, ознакомьтесь с моим кодом и дайте мне знать, в чем проблема, которая вызывает приведенное ниже исключение, даже если я отправляю данные.
JSp и скрипт
<td>
<label for="shippingInstructions">shipping Instructions</label>
<input type="text" id="shippingInstructions" onchange="detectedChange(this,${entryNumberHtml})"/>
</td>
<script type="text/javascript">
function detectedChange(data,entry){
var entryNum=entry.toString();
var ins = data.value;
console.log("xhr post request")
$.ajax({
url:config.encodedContextPath "/cart/findShippingInstructions",
data:JSON.stringify({ "entryCodes":entryNum,"shippingInstructions":ins }),
datatype:"json",
contentType:'application/json',
type:"POST"
})
}
</script>
Данные, которые он отправляет через XHR
{"entryCodes":"0","shippingInstructions":"Hi"}
ControllerCode
@ResponseBody
@RequestMapping(value = "/findShippingInstructions", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public final Map<String, String> saveShippingInstructions(@RequestParam("entryCodes")
final String entryCodes, @RequestParam("shippingInstructions")
final String shippingInstructions)
{
final Map<String, String> shipInstructionsResult = new HashMap<>();
try
{
final CartModel sessionCart = cartService.getSessionCart();
trainingCartFacade.saveShippingInstructions(sessionCart, entryCodes, shippingInstructions);
final TWCommerceCartParameter param = new TWCommerceCartParameter();
param.setCart(sessionCart);
param.setEnableHooks(true);
commerceCartCalculationStrategy.recalculateCart(param);
shipInstructionsResult.put("result", "reload");
}
catch (final Exception ex)
{
LOG.error("Exception occurred while storing ");
shipInstructionsResult.put("result", "do nothing");
}
return shipInstructionsResu<
}
Ошибка, которую я получаю
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'entryCodes' is not present]
спасибо за помощь
Ответ №1:
Если вы используете @ResponseBody
, вы также можете создать структуру / объект, содержащий как ваши атрибуты entryCode
, так и shippingInstructions
, Instruction
например, :
@Data //Lombok Annotation
public class Instruction {
@NotBlank
private final String entryCode;
@NotBlank
private final String shippingInstructions;
}
таким образом, вам не нужно использовать requestParams и RequestBody вместе, что может привести к проблемам, и у вас есть @Valid аннотация, например
public final Map<String, String> saveShippingInstructions ( @RequestBody @Valid Instruction instruction )`
Комментарии:
1. Да, @Youri, я сделал то же самое, смог решить, когда столкнулся с этой проблемой, создав форму POJO. Большое спасибо. забыл обновить это.
2. Рад это слышать!