【问题标题】:Ajax call param with @modelAttribute in Spring在 Spring 中使用 @modelAttribute 调用 Ajax 参数
【发布时间】:2016-01-11 08:41:10
【问题描述】:

我正在使用 ajax 调用来提交表单。 但我无法将参数作为模型属性访问。

Ext.Ajax.request({
                url: 'url',
                headers: { 'Content-Type': 'application/json' },
                params : Ext.JSON.encode(form.getValues()), //this is the parameter in jason pattern

                success: function(response, options) {
                    var result = Ext.JSON.decode(response.responseText, true);

                    if (result.success) {

                        Ext.Msg.show({
                            title:'DataBase',
                            msg: result.message,
                            buttons: Ext.Msg.OK,
                            icon: Ext.Msg.INFO
                        });

我的疑问是,我能否像下面给定的代码一样将此参数作为模型属性访问。 ?

@RequestMapping(value="/employee/new", method = RequestMethod.POST )
@ResponseBody public String doAddEmp(@RequestBody String Str){
    try{
        empServ.setError();
        if(empServ.addEmp(Str)){
            return "{success:true, message:'Insertion Successfull'}";
        }else
            return "{success:false, message:\""+empServ.returnError()+"\"}";

    }
    catch(Exception e){
        e.printStackTrace();
        return "{success:false, message:'SQL ERROR'}";

    }

}

如果能听到一个很好的建议来解决我的疑问,我将非常感激。 如果这是错误的模式(对于参数),请建议我正确的模式。

【问题讨论】:

    标签: javascript ajax spring spring-mvc parameters


    【解决方案1】:

    您将@ModelAttribute 与@RequestBody 混淆了:您说您想访问模型属性,但您使用的是requestbody(两者都是绑定数据机制,一个来自参数,另一个来自正文)。

    对于 Ajax 请求,最好像在代码中那样使用 @RequestBody。

    确保:

    • Ext.Ajax.request 具有“方法:'POST'”
    • 您的控制器使用 @RestController 注释
    • 将“@RequestBody String Str”更改为“@RequestBody Employee employee”
    • 确保您的表单元素名称与员工对象字段匹配

    【讨论】:

    • 技术上@RequestBody String Str 也应该可以工作,但是当您要求正确的模式时,对于 REST api,通常让 Spring 在发布的 json 对象和模型之间进行映射(Employee in你的情况)。这样就可以调用empServ.addEmp(employee)。还要确保“url:'/employee/new'”。
    • 先生,我还有一个疑问 @RequestMapping(value="/employee/new", method = RequestMethod.POST ) @ResponseBody public String doAddEmp(@ModelAttribute Employee employee){ empServ.addEmp(Employee) ;如何从这个函数的 ajax 请求中发送参数。?
    • 为此 (@ModelAttribute) 您只需提交表单即可。如果您想更好地使用 Ajax,请像以前一样使用 @RequestBody。这里有一些链接可以查看alvinalexander.com/javascript/…techzoo.org/javascript-tutorial/extjs/…。在后一个示例中,数据使用 jsonData: book 发布。
    • 另外,我会在 spring 控制器上的 java 中添加一个断点,看看它是否到达它。这可能是您的映射问题,而不是您的代码。
    • 谢谢先生!我可以使用 @RequestBody 注释来做到这一点。这是日期格式的问题。字符串无法映射到日期格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2012-12-07
    • 2018-05-29
    • 2017-10-03
    • 2011-11-06
    • 2014-04-23
    • 2015-02-19
    相关资源
    最近更新 更多