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;
}