Java 必需的字符串参数';查询内容';在Spring MVC应用程序中使用Jquery发送多参数Ajax stringify请求时不存在

Java 必需的字符串参数';查询内容';在Spring MVC应用程序中使用Jquery发送多参数Ajax stringify请求时不存在,java,ajax,spring-mvc,Java,Ajax,Spring Mvc,按提交按钮时,#dbresult将在选择选项和文本区域显示值。 控制台中的错误消息: org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver logException 警告:已解析[org.springframework.web.bind.MissingServletRequestParameterException:所需字符串参数'querycontent'不存在] query.jsp <html

按提交按钮时,#dbresult将在选择选项和文本区域显示值。
控制台中的错误消息:

org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver logException
警告:已解析[org.springframework.web.bind.MissingServletRequestParameterException:所需字符串参数'querycontent'不存在]

query.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript"
    src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<title>Query DB</title>
</head>
<body>
    db:
    <select name="dbname" id="dbname">
        <option value="ibop_test">ibop_test</option>
        <option value="ibop">ibop</option>
    </select>
    <br>
    <textarea class="boxsizingBorder" id="sqlstr"></textarea>
    <br>
    <button onclick="showresult()">submit</button>
    <div id="dbresult"></div>
</body>
<script type="text/javascript">
    function showresult() {
        document.getElementById("dbresult").innerHTML = "querying...";
        var dbname = document.getElementById('dbname').value;
        var sqlstr = document.getElementById('sqlstr').value;
        var querycontent = JSON.stringify({
            "dbname" : dbname,
            "sqlstr" : sqlstr
        });
        console.log(querycontent); //In Chrome's developer tools window, we will see the logs
        $
                .ajax({
                    type : 'POST',
                    url : 'showresult', 
                    contentType : 'application/json',
                    data : querycontent,
                    dataType : 'html',
                    success : function(msg) {
                        document.getElementById("dbresult").innerHTML = msg;
                    },
                    error : function() {
                        document.getElementById("dbresult").innerHTML = "querying failed!";
                    }
                })
    }
</script>
</html>

查询数据库
db:
ibop_试验
ibop


提交 函数showresult(){ document.getElementById(“dbresult”).innerHTML=“查询…”; var dbname=document.getElementById('dbname')。值; var sqlstr=document.getElementById('sqlstr').value; var querycontent=JSON.stringify({ “dbname”:dbname, “sqlstr”:sqlstr }); log(querycontent);//在Chrome的开发者工具窗口中,我们将看到日志 $ .阿贾克斯({ 键入:“POST”, url:“showresult”, contentType:'应用程序/json', 数据:querycontent, 数据类型:“html”, 成功:功能(msg){ document.getElementById(“dbresult”).innerHTML=msg; }, 错误:函数(){ document.getElementById(“dbresult”).innerHTML=“查询失败!”; } }) }
DBQueryController.java

@Controller
public class DBQueryController {

    @RequestMapping(value = "/showresult", method = RequestMethod.POST)
    public @ResponseBody String showResult(@RequestParam String querycontent){
        String message = "db query result content.</br>";
        return message;
    }
}
@控制器
公共类DBQueryController{
@RequestMapping(value=“/showresult”,method=RequestMethod.POST)
public@responseBy字符串showResult(@RequestParam字符串querycontent){
String message=“db查询结果内容。
”; 返回消息; } }
由于您在
AJAX
调用中发送的是正文中的数据,因此
@RequestParam
将无法工作。您需要使用
@RequestBody
,如下所示:

@Controller
public class DBQueryController {

    @RequestMapping(value = "/showresult", method = RequestMethod.POST)
    public @ResponseBody String showResult(@RequestBody Map<String, String> querycontent){
        String message = "db query result content.</br>";
        return message;
    }
}
回到错误,因为您没有在请求中作为参数传递
querycontent
,这就是它抛出的原因

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

您似乎在使用
@RequestParam
而不是
@RequestBody
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'querycontent' is not present]