当前位置: 首页 > 知识库问答 >
问题:

关于在Spring MVC中使用@ModelAttory注释方法参数的一些信息

籍利
2023-03-14

我正在学习Spring MVC Showcase项目,可从STS仪表板下载

我有以下情况,但我并不完全清楚:

我有以下表格:

<form id="readForm"action="<c:url value="/messageconverters/form" />" method="post">
        <input id="readFormSubmit"type="submit"value="Read Form Data"/>             
</form>

与id="readForm"的表单的提交操作相关,我有以下Jquery函数,它简单地执行一个AJAX调用,将两个经过验证的文本变量隐藏在请求的主体字段中:**foo=bar和Fru=apple

$("#readForm").submit(function() {
    var form = $(this); // Contiene il riferimento all'elemento form submittato 

    // Contiene il riferimento all'emento input all'interno del form (il bottone)
    var button = form.children(":first");

    $.ajax({ 
        type: "POST",               // Tipo di Request: POST 
        // URL specificato dall'attributo "action" del form: "/messageconverters/form" 
        url: form.attr("action"),   
        // Dati che vengono passati all'interno del campo body dell'HTTP Request, 2 variabili
        data: "foo=bar&fruit=apple", 

        // Tipo di media type accettabile dalla response
        contentType: "application/x-www-form-urlencoded", 
        dataType: "text", // Tipo di dati passato dalla HTTP Request 

        success: function(text) {       // Caso di successo: 
            MvcUtil.showSuccessResponse(text, button); 
        }, 

        error: function(xhr) {          // Caso di errore:
            MvcUtil.showErrorResponse(xhr.responseText, button); 
        }
    });
    return false;
});

我的控制器类处理此请求的方法如下:

@RequestMapping(value="/form", method=RequestMethod.POST)
public @ResponseBody String readForm(@ModelAttribute JavaBean bean) {
    return "Read x-www-form-urlencoded: " + bean;
}

好的,该方法将使用@ModelAttribute注释注释的JavaBean对象作为输入参数。

看看定义JavaBean类的示例内部,我有:

@XmlRootElement
public class JavaBean {

    @NotNull
    private String foo;
    @NotNull
    private String fruit;

    public JavaBean() {
    }

    public JavaBean(String foo, String fruit) {
        this.foo = foo;
        this.fruit = fruit;
    }

    // GETTER e SETTER METHOD
}

因此JavaBeans包含两个属性,它们与我提交表单时生成的HTTP请求中传递的表单变量同名

阅读@ModelAt⃣注释留档(http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/bind/annotation/ModelAttribute.html),我发现我可以使用它来注释方法,也可以使用它来注释方法参数。

我的情况是第二种情况,对于这种情况,我可以阅读:将方法参数或方法返回值绑定到命名模型属性的注释,暴露给web视图

那么到底是什么意思呢?

我认为,如果我用这个注释来注释一个方法参数,这意味着如果在HTTP请求体中传递的变量名称与我的注释对象的变量匹配,Spring会自动将这个变量的值复制到在注释对象中具有相同名称的属性中

但我不确定这一点...

有人能帮我理解好这个东西吗?

Tnx安德里亚

共有2个答案

阚正真
2023-03-14

我的回答可能很晚,但我正在研究同样的问题,发现了这个有趣的链接。

它给出了在方法级使用@ModelAttribute()的理解,这与@SessionAttribute注释配合得很好。http://www . intertech . com/Blog/understanding-spring-MVC-model-and-session-attributes/

濮阳原
2023-03-14

我不这么认为。@ModelAttory与HTTP请求参数无关。当您注释方法参数时,例如:

public String foo(@ModelAttribute ("petKey") Pet pet){
}

您将有一个来自控制器模型对象的“宠物”对象。Spring会在模型地图对象中搜索“宠物键”。

当您注释您的方法时,例如:

@ModelAttribute ("petKey")
public Pet foo(){
   return new Pet;
}

在执行方法并从方法返回后,Spring会将“new Pet”作为值,将“petKey”作为键放入模型对象(map)中。

 类似资料:
  • 问题内容: 我刚刚开始在Java 8中使用注释,并得到了一些意外的结果。 我有这样的方法: 我编写了一个JUnit测试,为参数searchList传递了空值。我原以为会发生某种类型的错误,但好像没有注释就通过了。这是预期的行为吗?据我了解,这是允许您跳过编写样板空检查代码。 对于@NotNull应该做什么的解释将不胜感激。 问题答案: 和自己做什么。它们应该充当文档工具。 该注释提醒您在以下情况下

  • 我编写了一个JUnit测试,为参数searchingList传入null值。我原以为会发生某种类型的错误,但结果好像注释不在那里一样。这是意料之中的行为吗?根据我的理解,这是允许您跳过编写样板空校验代码。 如果能解释一下@NotNull到底应该做什么,将会非常感谢。

  • 我正在学习Spring核心认证,我对SpringMVC如何处理REST网络服务有些怀疑。 阅读留档我发现了这个例子: 好的,它显示了2SpringMVC方法(我认为应该将其声明为控制器类,是真的吗)。 这些方法都处理对 /orders 资源的 HTTP 请求(根据 REST 样式,其中资源被视为管理一种数据和状态并提供此类处理的编程元素)。 在这种情况下,如果对 /订单的 HTTP 请求是 GET

  • 问题内容: 我在Spring领域还很陌生,我开发了一个简单的项目,该项目使用Spring 3.2.1和Hibernate 4.1.9来实现DAO。该项目可以正常工作,但是我对在此DAO的CRUD方法上使用 @Transactional Spring批注有一些疑问。 这是实现我的项目的CRUD操作的类的完整代码: 好的,正如您所看到的,使用@Transactional注释对某些方法进行了注释。 我在

  • 今天,我正在研究可从STS仪表板下载的Spring MVC展示 我对Spring 3.2版本引入的新注释@MatrixVariable以及URI路径中Matrix变量的使用有些怀疑。 在我的家中.jsp视图我有以下链接: 此处阅读有关@MatrixVariable注释的官方文档:http://static.springsource.org/spring-framework/docs/3.2.0.M

  • 这是实现我的项目的CRUD操作的类的整个代码: 好的,正如您所看到的,使用@Transactional注释对一些方法进行了注释。 我正在阅读官方文档http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/transaction.html中关于该注释在方法上的使用,它看到了:使用@transac