Hibernate 在SpringMVC中,Jackson依赖Post请求,JSON没有隐式转换为RequestBody对象吗?

Hibernate 在SpringMVC中,Jackson依赖Post请求,JSON没有隐式转换为RequestBody对象吗?,hibernate,rest,maven,spring-mvc,jakarta-ee,Hibernate,Rest,Maven,Spring Mvc,Jakarta Ee,我一直在尝试通过UserTransaction Model为UserModel类中确实存在的用户发出Post请求,以插入数据。直到我使用LoginForm控制器中的UserModel类,通过请求处理程序方法public String addUser(@RequestBody HashMap userJson)将数据分别插入Users表 但是,问题是当我尝试插入关系数据时。它不起作用,结果甚至没有被调用到控制器RequestHandler方法 public void doTransaction(@

我一直在尝试通过
UserTransaction Model
UserModel
类中确实存在的用户发出Post请求,以插入数据。直到我使用LoginForm控制器中的
UserModel
类,通过请求处理程序方法
public String addUser(@RequestBody HashMap userJson)
将数据分别插入Users表

但是,问题是当我尝试插入关系数据时。它不起作用,结果甚至没有被调用到控制器RequestHandler方法
public void doTransaction(@RequestBody usertransaction tr)
,因为jackson dependency从jsp接收到的JSON到usertransaction tr对象的隐式转换似乎没有发生

事务Jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>

<link rel="stylesheet"
    href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link href="https://fastcdn.org/Animate.css/3.4.0/animate.min.css"
    rel="stylesheet">

<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">

<script
    src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

</head>
<body>
    <form method="post"   id="form" style="">














        <table cellspacing="15" style="">
            <tr>
                <th><label>UserId </label></th>
            <tr>
                <td><input type="text" id="userId" name="userId" required
                    placeholder="" /></td>
            </tr>

            <tr>
                <th><label>transactionAmount</label></th>

            </tr>

            <tr>
                <td><input type="text" id="transactionAmount"
                    name="transactionAmount" required placeholder="transactionAmount"></td>

            </tr>
            <tr>
                <th><label>From</label></th>

            </tr>

            <tr>
                <td><input type="text" id="from" name="from" required
                    placeholder="from"></td>

            </tr>

            <tr>
                <th><label>To</label></th>

            </tr>

            <tr>
                <td><input type="text" id="to" name="to" required
                    placeholder="to"></td>

            </tr>

            <tr>
                <th><label>transactionDate</label></th>

            </tr>

            <tr>
                <td><input type="text" id="transactionDate"
                    name="transactionDate" required placeholder="transactionDate"></td>

            </tr>


            <tr>
                <th><label>PaymentMode</label></th>

            </tr>

            <tr>
                <td><input type="text" id="PaymentMode" name="PaymentMode"
                    required placeholder="PaymentMode"></td>

            </tr>



            <tr>
                <th><label> CurrentBalance</label></th>

            </tr>

            <tr>
                <td><input type="text" id=" CurrentBalance" name="CurrentBalance"
                    required placeholder=" CurrentBalance"></td>

            </tr>














            <tfoot>
                <tr>
                    <th><button class="btn btn-primary " id="submit">Register</button>
                </tr>



            </tfoot>






        </table>

    </form>
        <script>
    $("#submit")
    .click(
            function(e) {
//alert('hello');
                var loginForm = $('#form').serializeArray();

                var loginFormObject = {};

                $.each(loginForm, function(i, v) {
                    loginFormObject[v.name] = v.value;
                });
                var loginFormObject = {};
                $.each(loginForm, function(i, v) {
                    loginFormObject[v.name] = v.value;
                });
            alert("hello");
            alert(JSON.stringify(loginFormObject));

                $
                        .ajax({
                            url : "userTransaction.obj",
                            type : "POST",
                            data : JSON.stringify(loginFormObject),
                            contentType : 'application/json;charset=utf-8',
                            dataType : "text",
                            success : function(res) {

                                alert(res);

                            }
                        });
                e.preventDefault();

            });

    </script>
</body>
</html>
用户模型类

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SecondaryTable;
import javax.persistence.Table;

import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.CollectionOfElements;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.ManyToAny;
import org.hibernate.engine.Cascade;
import org.springframework.beans.factory.annotation.Autowired;

@Entity
@Table(name = "usertransaction")
@Access(AccessType.FIELD)
public class usertransaction implements Serializable {

    @ManyToOne
    @JoinColumn(name = "userId")
    private UserModel user;

    public int getUserId() {
        return user.userId;
    }

    public void setUserId(int userid) {
        user.userId = userid;
    }

    @Id
    @GeneratedValue
    @Column(name = "transactionId")
    private int transactionId;
    @Column(name = "transactionAmount")
    private String transactionAmount;
    @Column(name = "from")
    private String from;

    @Column(name = "to")
    private String to;

    @Column(name = "transactionDate")
    private String transactionDate;

    @Column(name = "PaymentMode")
    private String PaymentMode;

    @Column(name = "CurrentBalance")
    private String CurrentBalance;

    public int getTransactionId() {
        return transactionId;

    }

    public void setTransactionId(int transactionId) {
        this.transactionId = transactionId;
    }

    public String getTransactionAmount() {
        return transactionAmount;
    }

    public void setTransactionAmount(String transactionAmount) {
        this.transactionAmount = transactionAmount;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getTransactionDate() {
        return transactionDate;
    }

    public void setTransactionDate(String transactionDate) {
        this.transactionDate = transactionDate;
    }

    public String getPaymentMode() {
        return PaymentMode;
    }

    public void setPaymentMode(String paymentMode) {
        PaymentMode = paymentMode;
    }

    public String getCurrentBalance() {
        return CurrentBalance;
    }

    public void setCurrentBalance(String currentBalance) {
        CurrentBalance = currentBalance;
    }

}
package com.model;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.CascadeType;




    @Entity
    @Table(name="users")
    public class UserModel {


        @OneToMany(mappedBy="user")
        Set<usertransaction> s=new HashSet<usertransaction>();


        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name="userId")
        public int userId;
        @Column(name="userName")
        private String userName;
        @Column(name="userDescription")
        private String userDescription;
        @Column(name="status")
        private String status;
        @Column(name="statusCode")
        private String statusCode;
        @Column(name="statusDescription")
        private String statusDescription;
        @Column(name="userSince") 
        private String userSince;
        @Column(name="PIN") 
        private String PIN;
        public int getUserId() {
            return userId;
        }
        public void setUserId(int userId) {
            this.userId = userId;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getUserDescription() {
            return userDescription;
        }
        public void setUserDescription(String userDescription) {
            this.userDescription = userDescription;
        }
        public String getStatus() {
            return status;
        }
        public void setStatus(String status) {
            this.status = status;
        }
        public String getStatusCode() {
            return statusCode;
        }
        public void setStatusCode(String string) {
            this.statusCode = string;
        }
        public String getStatusDescription() {
            return statusDescription;
        }
        public void setStatusDescription(String statusDescription) {
            this.statusDescription = statusDescription;
        }
        public String getUserSince() {
            return userSince;
        }
        public void setUserSince(String userSince) {
            this.userSince = userSince;
        }
        public String getPIN() {
            return PIN;
        }
        public void setPIN(String pIN) {
            PIN = pIN;
        }
        public String getErrorDescription() {
            return errorDescription;
        }
        public void setErrorDescription(String errorDescription) {
            this.errorDescription = errorDescription;
        }
        @Column(name="errorDescription")
        private String errorDescription;


    }
package.com.model;
导入java.util.HashSet;
导入java.util.Set;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.FetchType;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.JoinColumn;
导入javax.persistence.ManyToMany;
导入javax.persistence.OneToMany;
导入javax.persistence.Table;
导入org.hibernate.annotations.CascadeType;
@实体
@表(name=“users”)
公共类用户模型{
@OneToMany(mappedBy=“用户”)
Set s=新的HashSet();
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“userId”)
公共int用户id;
@列(name=“userName”)
私有字符串用户名;
@列(name=“userDescription”)
私有字符串用户描述;
@列(name=“status”)
私有字符串状态;
@列(name=“statusCode”)
私有字符串状态码;
@列(name=“statusDescription”)
私有字符串状态描述;
@列(name=“userSince”)
私有字符串userSince;
@列(name=“PIN”)
私有字符串PIN;
public int getUserId(){
返回用户标识;
}
public void setUserId(int userId){
this.userId=userId;
}
公共字符串getUserName(){
返回用户名;
}
public void setUserName(字符串用户名){
this.userName=用户名;
}
公共字符串getUserDescription(){
返回用户描述;
}
public void setUserDescription(字符串userDescription){
this.userDescription=userDescription;
}
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共字符串getStatusCode(){
返回状态码;
}
公共void setStatusCode(字符串){
this.statusCode=字符串;
}
公共字符串getStatusDescription(){
退货状态描述;
}
公共无效设置状态描述(字符串状态描述){
this.statusDescription=状态描述;
}
公共字符串getUserSince(){
返回userSince;
}
public void setUserSince(字符串userSince){
this.userSince=userSince;
}
公共字符串getPIN(){
回位销;
}
公共无效设置pIN(字符串pIN){
引脚=引脚;
}
公共字符串getErrorDescription(){
返回错误描述;
}
public void setErrorDescription(字符串errorDescription){
this.errorDescription=errorDescription;
}
@列(name=“errorDescription”)
私有字符串错误描述;
}
下面的第一幅图显示了错误的请求,控制器没有被调用,但当我删除 @RequestBody它的工作原理如第二幅图所示


我无法解决这个问题,能否得到一个答案,以便继续我的项目?这是ajax url
url:“userTransaction.obj”
,对吗?您是否尝试打开控制台并跟踪请求?您得到的响应是什么?这就是错误所在。它给出了错误的请求错误,因为隐式转换不起作用。当我删除@RequestBody时,ajax请求起作用,因为通过ajax发送的json对象没有转换为Model usertransaction,因此出现错误,并且您没有任何错误日志?当序列化json时,
public void setUserId(int-userid){user.userid=userid;}
用户为空时,这似乎是个问题,因此这应该会引发NPECan,您可以将类
usertransaction
重命名为
usertransaction
?忽略Java命名约定可能是一个问题。
package com.model;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.CascadeType;




    @Entity
    @Table(name="users")
    public class UserModel {


        @OneToMany(mappedBy="user")
        Set<usertransaction> s=new HashSet<usertransaction>();


        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name="userId")
        public int userId;
        @Column(name="userName")
        private String userName;
        @Column(name="userDescription")
        private String userDescription;
        @Column(name="status")
        private String status;
        @Column(name="statusCode")
        private String statusCode;
        @Column(name="statusDescription")
        private String statusDescription;
        @Column(name="userSince") 
        private String userSince;
        @Column(name="PIN") 
        private String PIN;
        public int getUserId() {
            return userId;
        }
        public void setUserId(int userId) {
            this.userId = userId;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getUserDescription() {
            return userDescription;
        }
        public void setUserDescription(String userDescription) {
            this.userDescription = userDescription;
        }
        public String getStatus() {
            return status;
        }
        public void setStatus(String status) {
            this.status = status;
        }
        public String getStatusCode() {
            return statusCode;
        }
        public void setStatusCode(String string) {
            this.statusCode = string;
        }
        public String getStatusDescription() {
            return statusDescription;
        }
        public void setStatusDescription(String statusDescription) {
            this.statusDescription = statusDescription;
        }
        public String getUserSince() {
            return userSince;
        }
        public void setUserSince(String userSince) {
            this.userSince = userSince;
        }
        public String getPIN() {
            return PIN;
        }
        public void setPIN(String pIN) {
            PIN = pIN;
        }
        public String getErrorDescription() {
            return errorDescription;
        }
        public void setErrorDescription(String errorDescription) {
            this.errorDescription = errorDescription;
        }
        @Column(name="errorDescription")
        private String errorDescription;


    }