SSM框架和前端ajax数据传递问题

前端ajax


<%--
  Created by IntelliJ IDEA.
  User: 汪海洋
  Date: 2023/8/14
  Time: 12:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>评论区</title>
</head>
<body>
        ID:<input type="text" name="id" id="id"/><br><br>
        评论:<textarea name="comment" id="words"></textarea><br><br>
        <button onclick="setDate()">发表评论</button>
        <div id="comments"></div>
</body>
<script type="text/javascript">
    function setDate() {
        const time = new Date();
        const data = {
            id : document.getElementById("id").value,
            comment : document.getElementById("words").value,
            time : time.toLocaleDateString()
        }
        var xhr =new XMLHttpRequest()
        xhr.open("POST","/addComment",true)
        xhr.setRequestHeader('Content-Type', 'application/json');
        xhr.onreadystatechange = function () {
            if(xhr.status === 200  && xhr.readyState === 4){
                console.log("请求发送成功,服务器端口响应全部数据!")
            }
        }
        xhr.send(JSON.stringify(data));
        xhr.timeout = 2000
        xhr.timeout =function () {
            alert("超时!")
        }
        xhr.onerror =function () {
            alert("网络异常!")
        }
    }

    // setInterval(getComments,1000);
    getComments()
    function getComments() {
        // const id = document.getElementById("comments").value;
        const  id = document.getElementById("comments")
        const xhr = new XMLHttpRequest();
        xhr.open("GET","loadComments?id=1",true);
        xhr.onreadystatechange = function (){
            if (xhr.status === 200 && xhr.readyState ===4){
                let data = xhr.response.list
                console.log(data)

                for(let i =0 ; i<data.length ; i++){
                    id.innerHTML = data[i].id+"<br>"+
                    data[i].comment+"<br>"+
                    data[i].time+"<br>"
                }

            }
        }
        xhr.send()
        xhr.timeout = 2000
        xhr.timeout =function () {
            alert("超时!")
        }
        xhr.onerror =function () {
            alert("网络异常!")
        }
    }
</script>
</html>


后端

package com.experience.controller;

import com.experience.entity.Comment;
import com.experience.service.Comment_load_service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.testng.annotations.Test;

import java.util.List;

/**
 * @author 汪海洋
 */
@Controller
public class Comment_load_Controller {
    @Autowired
    Comment_load_service comment_load_service;
    @RequestMapping("/loadComments")
    @ResponseBody
    public void show(@RequestParam(value = "id", required = true) int id) {
        List<Comment> list = comment_load_service.getComments(id);
        for (Comment comment : list) {
            System.out.println(comment.toString()
            );
        }

    }
}


错误

img

img

HTTP状态 500 - 内部服务器错误

类型 异常报告

消息 Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.Integer'

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.Integer'
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

根本原因。

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.Integer'
    org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
    org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
    jdk.proxy3/jdk.proxy3.$Proxy16.selectList(Unknown Source)
    org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
    org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:139)
    org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:76)
    org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
    jdk.proxy3/jdk.proxy3.$Proxy19.getComments(Unknown Source)
    com.experience.service.impl.Comment_load_service_impl.getComments(Comment_load_service_impl.java:17)
    com.experience.controller.Comment_load_Controller.show(Comment_load_Controller.java:24)
    java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    java.base/java.lang.reflect.Method.invoke(Method.java:578)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

根本原因。

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.Integer'
    org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:419)
    org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:164)
    org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:162)
    org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:49)
    org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:122)
    org.apache.ibatis.scripting.xmltags.DynamicContext$ContextMap.get(DynamicContext.java:94)
    org.apache.ibatis.scripting.xmltags.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:108)
    org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2685)
    org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:114)
    org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
    org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
    org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)
    org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
    org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
    org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:61)
    org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
    org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
    org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:470)
    org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:434)
    org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:44)
    org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)
    org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)
    org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)
    org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)
    org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)
    org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:41)
    org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:292)
    org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81)
    org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
    org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
    java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    java.base/java.lang.reflect.Method.invoke(Method.java:578)
    org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
    jdk.proxy3/jdk.proxy3.$Proxy16.selectList(Unknown Source)
    org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
    org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:139)
    org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:76)
    org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
    jdk.proxy3/jdk.proxy3.$Proxy19.getComments(Unknown Source)
    com.experience.service.impl.Comment_load_service_impl.getComments(Comment_load_service_impl.java:17)
    com.experience.controller.Comment_load_Controller.show(Comment_load_Controller.java:24)
    java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    java.base/java.lang.reflect.Method.invoke(Method.java:578)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

):注意 主要问题的全部 stack 信息可以在 server logs 里查看

建议所有的实体类使用lambok插件,自动注入getset方法,另外我上一个问题麻烦采纳一下啊兄弟,帮你解决问题不采纳,很难受哇

没有写id的set get方法

【以下回答由 GPT 生成】

你可以使用以下步骤来通过前端ajax将评论数据传递给后端,并在页面上显示出来:

  1. 首先,引入jQuery库。因为ajax是jQuery库的一部分,你可以使用它简化ajax请求的过程。你可以在头部添加以下代码:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  1. 在ajax请求中发送数据给后端。在setDate()函数中添加以下代码:
$.ajax({
    type: "POST",
    url: "url_to_your_backend",
    data: JSON.stringify(data),
    contentType: "application/json",
    success: function(response) {
        // 请求成功处理逻辑
    },
    error: function(jqXHR, textStatus, errorThrown) {
        // 请求失败处理逻辑
    }
});

请注意将url_to_your_backend替换为你的后端的URL。

  1. 在后端编写相应的请求处理逻辑。在后端,你需要使用对应的框架(如Spring MVC)来处理ajax请求,并将评论数据存储到数据库中。以下是一个使用Spring MVC处理ajax请求的示例代码:
@RestController
public class CommentController {

    @Autowired
    private CommentService commentService;

    @PostMapping("/comment")
    public ResponseEntity<?> addComment(@RequestBody Comment comment) {
        // 处理评论数据保存到数据库的逻辑
        commentService.addComment(comment);
        return ResponseEntity.ok().build();
    }
}

在上述代码中,Comment是一个评论的实体类,CommentService是一个用于处理评论相关逻辑的服务类。

  1. 在前端请求成功的回调函数中显示评论。在ajax请求成功的回调函数中添加以下代码:
success: function(response) {
    // 请求成功处理逻辑
    // 在页面中显示评论
    var commentHTML = "<p>ID: " + data.id + "</p>" +
                      "<p>评论: " + data.comment + "</p>" +
                      "<p>时间: " + data.time + "</p>";
    $("#comments").append(commentHTML);
    // 清除输入框的内容
    $("#id").val("");
    $("#words").val("");
},

以上代码将评论的信息组装成HTML代码,并将其添加到页面上名为commentsdiv元素中。同时,还清空了输入框中的内容以便用户输入新的评论。

综上所述,以上是使用前端ajax将评论数据传递给后端,并在页面上显示出来的解决方案。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^