SpringBoot Controller无法接收html表单对象参数问题

手写白 2018-09-20 09:01:43
Controller就是无法进入doSave()方法, 也不能打印contractItem,什么原因啊. 求助各位大神 或者有没有其他办法可以接收整个表单对象的方法




代码如下:

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

@Entity
@Table(name = "contract")
public class ContractItem implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Integer id; // 序号

@Column(name="date")
@Temporal(TemporalType.DATE)
private Date date; // 时间

@Column(name="serial_no")
private String serialNo; // 合同编号

@Column(name="first_party")
private String firstParty; // 甲方

@Column(name="second_party")
private String secondParty; // 乙方

@Column(name="third_party")
private String thirdParty; // 丙方

@Column(name="fourth_party")
private String fourthParty; // 丁方

@Column(name="name")
private String name; // 合同名称

@Column(name="start_date")
@Temporal(TemporalType.DATE)
private Date startDate; // 起始时间

@Column(name="end_date")
@Temporal(TemporalType.DATE)
private Date endDate; // 截止时间

@Column(name="contract_object")
private String contractObject; // 合同标的

@Column(name="price")
private Double price; // 合同金额

@Column(name="department")
private String department; // 承办科室

@Column(name="department_head")
private String departmentHead; // 科室负责人

@Column(name="trial_department")
private String trialDepartment; //会审部门

@Column(name="is_discussion")
private Boolean isDiscussion; // 是否党政联合会议讨论

@Column(name="signtory")
private String signtory; // / 合同签署人

@Column(name="seal")
private String seal; // 合同用章情况

@Column(name="is_standard_model")
private Boolean isStandardModel; // 是否为标准合同范本

@Column(name="change_or_break")
private Byte changeOrBreak; // 是否有变更或违约的情况

@Column(name="archive")
private String archive; // 归档情况

@Column(name="remark")
private String remark; // 备注

// 省略getter,setter,toString
}



@Controller
@RequestMapping("/contract")
public class MainController {
@Resource
private ContractService contractService;


@PostMapping("/doSave")
public Map<String, Object> doSave(@RequestBody ContractItem contractItem) {
HashMap<String, Object> map = new HashMap<>();
System.out.println("enter save:item:" + contractItem);
map.put("code", "sucess");
return map;
}




<div class="easyui-panel" title="新增合同" style="width: 900px;height: 700px">
<div style="padding:10px 60px 20px 60px">
<form id="wu-form" method="post">
<table cellpadding="5" style="font-size: 15px">
<tr>
<td>时间:</td>
<td><input class="easyui-datebox" name="date" style="width:133px"></td>
<td>合同编号:</td>
<td><input class="easyui-textbox" type="text" name="serialNo" data-options="required:true"/></td>
</tr>
<tr>w
<td>合同名称:</td>
<td><input class="easyui-textbox" type="text" name="name" data-options="required:true"/></td>
</tr>
<tr>
<td>签约方甲:</td>
<td><input class="easyui-textbox" name="firstParty" type="text" data-options="required:true"/></td>
<td>签约方乙:</td>
<td><input class="easyui-textbox" name="secondParty" type="text" data-options="required:true"/></td>
</tr>
<tr>
<td>签约方丙:</td>
<td><input class="easyui-textbox" name="thirdParty" type="text" /></td>
<td>签约方丁:</td>
<td><input class="easyui-textbox" name="fourthParty" type="text" /></td>
</tr>
<tr>
<td>合同起始时间:</td>
<td><input class="easyui-datebox" name="startDate" style="width:133px"></td>
<td>合同截止时间:</td>
<td><input class="easyui-datebox" name="endDate" style="width:133px"></td>
</tr>
<tr>
<td>合同标的:</td>
<td><input class="easyui-textbox" name="contractObject" data-options="multiline:true"/></td>
<td>合同金额:</td>
<td><input class="easyui-textbox" type="text" name="price" data-options="required:true"/></td>
</tr>
<tr>
<td>承办科室:</td>
<td><input class="easyui-textbox" name="department" type="text" data-options="required:true"/></td>
<td>科室负责人:</td>
<td><input class="easyui-textbox" name="departmentHead" type="text" data-options="required:true"/></td>
</tr>
<td>会审部门:</td>
<td><input class="easyui-textbox" name="trialDepartment" type="text" data-options="required:true"/></td>
</tr>
<tr>
<td>党政联席会议讨论:</td>
<td>
<input type="radio" name="isDiscussion" value="1"/>是
<input type="radio" name="isDiscussion" value="0"/>否
</td>
<td>是否为标准合同范本:</td>
<td>
<input type="radio" name="isStandardModel" value="1"/>是
<input type="radio" name="isStandardModel" value="0"/>否
</td>
</tr>
<tr>
<td>合同签署人:</td>
<td><input class="easyui-textbox" name="signtory" type="text" data-options="required:true"/></td>
<td>合同用印情况:</td>
<td><input class="easyui-textbox" name="seal" type="text" data-options="required:true"/></td>
</tr>
<tr>
<td>有无变更、违约情况:</td>
<td>
<select class="easyui-combobox" name="changeOrBreak" style="width:133px">
<option value="0" selected="selected">都无</option>
<option value="1">违约</option>
<option value="2">变更</option>
<option value="3">都有</option>
</select>
</td>
</tr>
<tr>
<td>合同归档情况:</td>
<td><input class="easyui-textbox" name="archive" data-options="multiline:true"/></td>
</tr>
<tr>
<td>备注:</td>
<td><input class="easyui-textbox" name="remark" data-options="multiline:true" style="width: 300px;height:150px"/></td>
</tr>

</table>
</form>
<div style="text-align:center;padding:20px">
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="doSave()">保存</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="clearForm()">重置</a>
</div>
</div>
</div>

<script type="text/javascript">
/**
* 添加记录
*/
function doSave() {
$('#wu-form').form('submit', {
url: 'contract/doSave',
success: function (data) {
if (data) {
$.messager.alert('信息提示', '提交成功!', 'info');
$('#wu-dialog').dialog('close');
}
else {
$.messager.alert('信息提示', '提交失败!', 'info');
}
}
});
}
</script>


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>contract</groupId>
<artifactId>ContractManagement</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!--SpringBoot核心启动器,之后引入相关依赖模块就不
需要添加版本配置,SpringBoot会自动选择最合适的版本-->
<version>2.0.4.RELEASE</version>
</parent>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
</project>
...全文
953 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
getdate 2018-09-20
  • 打赏
  • 举报
回复
LZ 可以好好的看下此 文章 https://blog.csdn.net/suki_rong/article/details/80445880
手写白 2018-09-20
  • 打赏
  • 举报
回复
引用 8 楼 Li_jin_yang 的回复:
在url: 'contract/doSave',下加上data:$('#wu-form')serialize(),
controller里,使用doSave(ContractItem contractItem)


一样
小李c 2018-09-20
  • 打赏
  • 举报
回复
在url: 'contract/doSave',下加上data:$('#wu-form')serialize(),
controller里,使用doSave(ContractItem contractItem)
手写白 2018-09-20
  • 打赏
  • 举报
回复
引用 5 楼 Li_jin_yang 的回复:
直接doSave(ContractItem contractItem)试试
也是不行, 脑阔疼
手写白 2018-09-20
  • 打赏
  • 举报
回复
引用 4 楼 Li_jin_yang 的回复:
程序有没有报错

没有报错, 因为还没进入到Controller里的doSave()映射方法. 只弹出个easyui的提示框"完成".


我试了接收指定参数的方法就没有问题.
public Map<String, Object> doSave(@RequestParam(name = "name") String name) {}
小李c 2018-09-20
  • 打赏
  • 举报
回复
直接doSave(ContractItem contractItem)试试
小李c 2018-09-20
  • 打赏
  • 举报
回复
程序有没有报错
手写白 2018-09-20
  • 打赏
  • 举报
回复
引用 1 楼 Li_jin_yang 的回复:
你把@RequestBody改成@RequestParam试试
也不行, 进不来.
手写白 2018-09-20
  • 打赏
  • 举报
回复
也不行, 进不来.
小李c 2018-09-20
  • 打赏
  • 举报
回复
你把@RequestBody改成@RequestParam试试
手写白 2018-09-20
  • 打赏
  • 举报
回复
已解决. 用的https://blog.csdn.net/m0_37634472/article/details/70185073 里的方法二. 结贴了
手写白 2018-09-20
  • 打赏
  • 举报
回复
引用 12 楼 licip 的回复:
页面发送请求,请求的参数转化为ContractItem contractItem 这个类型,可能在转化的过程中,出现了问题,比如:日期格式不正确,转化不了日期,这时,程序不会再往下执行。所以,你doSave()的方法并没有执行。
要找出是那个字段转化错误,需要一个一个来,一般来说,字符串的不会出现转化问题。其它的类型,像日期、数字类型的容易出现这种问题。

还真是这样, 就是没个提示,我 还以为是注解什么的不对. 我的实体类的日期是 java.util.Date类型的, 可是我页面要怎么设置表单才能自动映射上?
licip 2018-09-20
  • 打赏
  • 举报
回复
页面发送请求,请求的参数转化为ContractItem contractItem 这个类型,可能在转化的过程中,出现了问题,比如:日期格式不正确,转化不了日期,这时,程序不会再往下执行。所以,你doSave()的方法并没有执行。
要找出是那个字段转化错误,需要一个一个来,一般来说,字符串的不会出现转化问题。其它的类型,像日期、数字类型的容易出现这种问题。
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在 Spring Boot 框架里,Controller 起着接收 HTTP 请求的关键作用。很多时候,我们得在 Controller 中获取客户端传来的请求参数,而这些参数常常是对象列表的形式。下面,就来详细讲讲在 Spring Boot 中怎样实现 Controller 接收对象列表。 首先,得设计好实体类来存储对象列表。这里举个例子,定义了两个实体类:Rules 和 Rule。Rules 类里有一个 List 类型的字段,专门用来存放 Rule 对象列表。具体代码如下: 接着,就是 Controller 方法的设计。在 Controller 中,定义了一个 addDrl 方法,用于接收客户端发来的请求参数。这里用 @PostMapping 注解来对应 POST 请求,并且将请求参数绑定到 Rules 实体类上。代码如下: 在页面呈现方面,使用 HTML 表单来提交请求参数。关键在于通过 name 属性来确定请求参数的名称,像 rules[0].column、rules[0].operate 等,这样才能把请求参数正确绑定到 Rules 实体类上。HTML 代码如下: 总的来说,在 Spring Boot 中实现 Controller 接收对象列表并不复杂。只要设计好实体类和 Controller 方法,就可以方便地接收客户端传来的对象列表参数,并进行后续的业务处理。同时,借助 HTML 表单提交请求参数,并将其绑定到实体类上,整个流程就能顺利实现。
内容概要:本文详细讲解了SpringBoot 中三种常见的接收参数的方法及其特点。首先是@RequestParam 注解的用法,包括name/value、required 和defaultValue 属性的功能介绍;其次是@PathVaribale 对RESTful 风格URL中参数接收的支持;再次是@RequestBody 处理POST、PUT 请求所带JSON 格式的主体内容的能力。每个部分都有详细的案例代码展示。此外还简要提到,在不用上述任何注释的情况下也能正常接受参数的方法,即只要确保controller 方法入参与请求入名完全相同就行。文中提供的实例演示了不同类型的数据交互方式(例如简单的键值对参数传递、文件上传以及复杂对象映射)及其实际运用场景。 适用人群:有一定Spring框架基础,希望深入理解和正确应用SpringBoot 接口参数接收机制的相关开发人员。 使用场景及目标:帮助读者掌握各种情况下的接口定义技巧,包括但不限于常规查询、修改操作或是涉及大量非表单数据传输(比如批量操作或者文件流处理)。通过对这三者的熟练使用可以大大提高接口的安全性和稳定性,使项目更加规范高效。 其他说明:理解这三种主要的参数接收手段对于Web应用程序的设计至关重要,能够有效避免因错误配置而导致的安全风险和服务异常问题的发生。同时,良好的API设计应该考虑到用户体验,因此开发者应当基于具体的业务逻辑选择最合适的方案来进行参数交换,从而达到最佳的效果。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧