1

私のSpringコントローラークラスの1つのメソッド、

@RequestMapping(value = "/products/{productId}/specifications", method = RequestMethod.GET)
public String setup(@PathVariable("productId") Integer pid, Model m) {
  //... 
  m.addAttribute(foo);  <-- error
  return "my-page";
}

「Model object must not be null」というエラー メッセージが表示された後、次のようにメソッド シグネチャを変更しました。 public ModelAndView setup(@PathVariable("productId") Integer pid) {

    //...
    ModelAndView mv = new ModelAndView("my-page");
    mv.addObject(foo);     <-- error

    return mv; 
}

修正したコードを一度実行することができました。しかし、ModelAndView でも同じエラーが発生しました。私は長年Spring MVCを使用してきました。この問題が発生したのは初めてです。原因は何ですか?

Spring 4.0.6.RELEASE を使用しています。

4

1 に答える 1

0

参照が何をfoo指すかを示すコードを提供していませんが、null 参照であると想定しても安全です。

Github でプロジェクトのコードを見てみましたが、ここで何が起こっているかは明らかです。

ModelAndView#addObject(Object)メソッドはModelMap # addAttribute(Object)メソッドに委譲します。このメソッドObjectは、質問が求めている正確なメッセージを使用して、提供された が null ではないことをアサートします。

ModelAndView方法:

public ModelAndView addObject(Object attributeValue) {
    getModelMap().addAttribute(attributeValue);
    return this;
}

ModelMap方法:

public ModelMap addAttribute(Object attributeValue) {
    Assert.notNull(attributeValue, "Model object must not be null");
    if (attributeValue instanceof Collection && ((Collection<?>) attributeValue).isEmpty()) {
        return this;
    }
    return addAttribute(Conventions.getVariableName(attributeValue), attributeValue);
}
于 2014-08-21T21:40:39.757 に答える