【问题标题】:Spring MVC Ajax: Passing Empty Array to Ajax ControllerSpring MVC Ajax:将空数组传递给 Ajax 控制器
【发布时间】:2019-07-03 14:17:42
【问题描述】:

我有以下在接收非空数组时效果很好,

$.ajax({
  url: "ajaxController",
  dataType: "json",
  type: "get",
  data: {
       'term': request.term,
       'exclude': ["45","66"]
  },

控制器(注意 RequestParam 值中的 [] -- 结果在 String[] 中):

public List<KeyValueBean> getChoices(String term, 
                                     @RequestParam(value = "exclude[]") 
                                        String[] exclude)  {
}                               

但是如果我在同一代码中传递一个空数组,有时会发生这种情况,它会中断:

'exclude': []

或者

'exclude': JSON.stringify([])

错误:

org.springframework.web.bind.MissingServletRequestParameterException: Required 
String[] parameter 'exclude[]' is not present

【问题讨论】:

    标签: java ajax spring spring-mvc


    【解决方案1】:

    如果你注意错误,它说你的请求参数exclude不能为空。如果您有时需要发送空数组,您可以通过这种方式将您的参数标记为可选(非必需):

    @RequestParam(required = false, value = "exclude[]")
    

    【讨论】:

    • 是的,这是最接近的解决方案。但是你有一个错误:你不能使用value="exclude" Spring 需要括号:value="exclude[]"。一旦我解决了这个问题,两种情况(空的和非空的)都开始工作了。但我的问题仍然是,我没有传递 NULL,而是传递了一个空数组。为什么 Spring 收到 NULL?这不是我想要发送的。如果我的意思是 NULL,我会传递 'exclude': null
    • 此类错误与验证有关。在数组验证方面,空数组和空数组具有相同的概念。我的意思是,发送空数组或空数组没有任何区别!在这两种情况下,您都违反了验证规则。
    • 但问题是为什么 Spring 将 [] 绑定到 NULL。我通过的内容有所不同。我没有通过null 我通过了[]。 Spring 可以完成 String[] 绑定(长度为 0 的数组),这正是我所期待的。 [] 是否有效而 NULL 无效是我自己的决定,它们应该单独绑定。
    【解决方案2】:

    问题可能是因为您在传递名为“exclude”的对象时使用value="exclude[]" 传递了@RequestParam。

    所以,实际上应该是:

    public List<KeyValueBean> getChoices(String term, 
                                     @RequestParam(value = "exclude") 
                                        String[] exclude)  {
    }   
    

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2013-08-17
      • 1970-01-01
      • 2011-12-21
      • 2015-11-22
      • 2016-01-06
      相关资源
      最近更新 更多