НЕВЕРНЫЙ запрос 404 при отправке данных через post-метод весной

#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. Рад это слышать!