对于想了解客户端发送的请求在语法上不正确。-SpringMVC+JDBC模板的读者,本文将是一篇不可错过的文章,我们将详细介绍客户端发送请求时,请求类型可以省略,并且为您提供关于java–使用spri
对于想了解客户端发送的请求在语法上不正确。-Spring MVC + JDBC模板的读者,本文将是一篇不可错过的文章,我们将详细介绍客户端发送请求时,请求类型可以省略,并且为您提供关于java – 使用spring jdbc模板填充结果、java – 将多个表返回到spring jdbc模板的存储过程、java-Spring @RequestBody:客户端发送的请求在语法上不正确、Java学习笔记43(Spring的jdbc模板)的有价值信息。
本文目录一览:- 客户端发送的请求在语法上不正确。-Spring MVC + JDBC模板(客户端发送请求时,请求类型可以省略)
- java – 使用spring jdbc模板填充结果
- java – 将多个表返回到spring jdbc模板的存储过程
- java-Spring @RequestBody:客户端发送的请求在语法上不正确
- Java学习笔记43(Spring的jdbc模板)
客户端发送的请求在语法上不正确。-Spring MVC + JDBC模板(客户端发送请求时,请求类型可以省略)
我是Spring MVC的新手。运行项目时我被错误卡住 错误-客户端发送的请求在语法上不正确。
我有一个实体类PatientInfo。我的jsp页面是demo1。我的控制器是患者控制器。我要实现的功能是将值插入数据库。但是我无法在控制器中调用我的函数(add-
update2)。
demo1.jsp
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%><html><head><title>Registration Form</title></head><body><h2 align="center">Full Registration Form</h2><hr /><table align="center" cellpadding="5" cellspacing="5"> <form:form modelAttribute="patientInfo" method="POST" action="add-update2"> <tr> <td> First Name</td> <td><form:input path="firstName"/></td> </tr> <tr> <td>Middle Name</td> <td><form:input path="middleName" /></td> </tr> <tr> <td>Last Name</td> <td><form:input path="lastName"/> </td> </tr> <tr> <td>Age</td> <td><form:input path="age" /></td> </tr> <tr> <td>Gender</td> <td><form:select path="gender"> <form:option value="" label="Select Gender" /> <form:options items="${genderList}" itemLabel="gender" itemValue="gender" /> </form:select></td> </tr> <tr> <td>Marital Status</td> <td><form:select path="maritalStatus"> <form:option value="" label="Select Marital Status" /> <form:options items="${maritalList}" itemLabel="maritalstatus" itemValue="maritalstatus" /> </form:select></td> </tr> <tr> <td>Nationality</td> <td><form:select path="nationality"> <form:option value="" label="Select Nationality" /> <form:options items="${nationalityList}" itemLabel="country" itemValue="country" /> </form:select></td> </tr> <tr name="tstest"> <td>Date Of Birth</td> <td><form:input path="dateOfBirth" name="timestamp" value=""/><a href="javascript:show_calendar(''document.tstest.timestamp'', document.tstest.timestamp.value);"><img src="../images/cal.gif" width="16" height="16" border="0" alt="Click Here to Pick up the timestamp"></a> </td> </tr><tr> <td>E-mail</td> <td><form:input path="email"/></td></tr> <tr> <td>Blood Group</td> <td><form:select path="bloodGroup"> <form:option value="" label="Select Blood Group" /> <form:options items="${bloodList}" itemLabel="bloodgroupname" itemValue="bloodgroupname" /> </form:select></td> </tr> <tr> <td><input type="submit" value="submit"/></td> </tr> </form:form></table></body></html>
Controller-PatientController.java
package com.app.ehr.api;import com.app.ehr.domain.Bloodgroup;import com.app.ehr.domain.Gendertype;import com.app.ehr.entities.Patientinfo;import com.app.ehr.domain.Maritalstatus;import com.app.ehr.domain.Nationality;import com.app.ehr.model.Patient;import com.app.ehr.service.PatientService;import org.springframework.stereotype.Controller;import java.util.ArrayList;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.ui.Model;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controllerpublic class PatientController { public PatientService patientService; @Autowired public PatientController(PatientService patientService){ this.patientService = patientService; } @RequestMapping(value="/", method= RequestMethod.GET) public String index(ModelMap map) { return "index"; } @RequestMapping(value="/full-reg", method= RequestMethod.GET) public String fullreg(ModelMap map,Patientinfo patientInfo) { List<Bloodgroup> bloodList = new ArrayList<Bloodgroup>(); List<Gendertype> genderList = new ArrayList<Gendertype>(); List<Nationality> nationalityList = new ArrayList<Nationality>(); List<Maritalstatus> maritalList = new ArrayList<Maritalstatus>(); bloodList=patientService.getAllBloodgroup(); genderList= patientService.getAllGendertype(); nationalityList=patientService.getAllNationality(); maritalList=patientService.getAllMaritalstatus(); for(int i=0;i<bloodList.size();i++) { System.out.println("---------------------Controller"+bloodList.get(i)); } // map.addAttribute("hello", "Hello Spring from Netbeans!!"); map.addAttribute("patientInfo", patientInfo); map.addAttribute("bloodList", patientService.getAllBloodgroup()); map.addAttribute("genderList", patientService.getAllGendertype()); map.addAttribute("maritalList", patientService.getAllMaritalstatus()); map.addAttribute("nationalityList", patientService.getAllNationality()); return "demo1"; } @RequestMapping(value="/add-update2", method= RequestMethod.POST) public String addUpdate(@ModelAttribute("patientInfo") Patientinfo patientInfo) {System.out.println("----------------------------------------- From Controller------------------------------------------------"); //patientService.addPatient(patientInfo); return "redirect:/full-reg"; }}
实体类-PatientInfo.java
package com.app.ehr.entities;import java.io.Serializable;import java.math.BigInteger;import java.util.Date;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.NamedQueries;import javax.persistence.NamedQuery;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;/** * * @author HP LAPTOP */@Entity@Table(name = "patientinfo")@NamedQueries({ @NamedQuery(name = "Patientinfo.findAll", query = "SELECT p FROM Patientinfo p")})public class Patientinfo implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "PatientKey") private Long patientKey; @Column(name = "PatientMRNumber") private String patientMRNumber; @Column(name = "IntPrimaryPhysicianKey") private BigInteger intPrimaryPhysicianKey; @Column(name = "FirstName") private String firstName; @Column(name = "MiddleName") private String middleName; @Column(name = "LastName") private String lastName; @Column(name = "Age") private Short age; @Column(name = "Gender") private String gender; @Column(name = "Nationality") private String nationality; @Column(name = "DateOfBirth") @Temporal(TemporalType.TIMESTAMP) private Date dateOfBirth; @Column(name = "MaritalStatus") private String maritalStatus; @Column(name = "Occupation") private String occupation; @Column(name = "AnnualIncome") private String annualIncome; @Column(name = "BloodGroup") private String bloodGroup; @Column(name = "Email") private String email; @Column(name = "ModeOfPayment") private String modeOfPayment; @Column(name = "ModeOfPaymentAlt") private String modeOfPaymentAlt; @Column(name = "ExtPrimaryPhysicianName") private String extPrimaryPhysicianName; @Column(name = "ExtPrimaryPhysicianPhoneNumber") private String extPrimaryPhysicianPhoneNumber; @Column(name = "IsDeleted") private Boolean isDeleted; @Column(name = "Meta_CreatedByUser") private String metaCreatedByUser; @Column(name = "Meta_UpdatedDT") @Temporal(TemporalType.TIMESTAMP) private Date metaUpdatedDT; @Column(name = "Meta_CreatedDT") @Temporal(TemporalType.TIMESTAMP) private Date metaCreatedDT; public Patientinfo() { } public Patientinfo(Long patientKey) { this.patientKey = patientKey; } public Long getPatientKey() { return patientKey; } public void setPatientKey(Long patientKey) { this.patientKey = patientKey; } public String getPatientMRNumber() { return patientMRNumber; } public void setPatientMRNumber(String patientMRNumber) { this.patientMRNumber = patientMRNumber; } public BigInteger getIntPrimaryPhysicianKey() { return intPrimaryPhysicianKey; } public void setIntPrimaryPhysicianKey(BigInteger intPrimaryPhysicianKey) { this.intPrimaryPhysicianKey = intPrimaryPhysicianKey; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getMiddleName() { return middleName; } public void setMiddleName(String middleName) { this.middleName = middleName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Short getAge() { return age; } public void setAge(Short age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getNationality() { return nationality; } public void setNationality(String nationality) { this.nationality = nationality; } public Date getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(Date dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getMaritalStatus() { return maritalStatus; } public void setMaritalStatus(String maritalStatus) { this.maritalStatus = maritalStatus; } public String getOccupation() { return occupation; } public void setOccupation(String occupation) { this.occupation = occupation; } public String getAnnualIncome() { return annualIncome; } public void setAnnualIncome(String annualIncome) { this.annualIncome = annualIncome; } public String getBloodGroup() { return bloodGroup; } public void setBloodGroup(String bloodGroup) { this.bloodGroup = bloodGroup; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getModeOfPayment() { return modeOfPayment; } public void setModeOfPayment(String modeOfPayment) { this.modeOfPayment = modeOfPayment; } public String getModeOfPaymentAlt() { return modeOfPaymentAlt; } public void setModeOfPaymentAlt(String modeOfPaymentAlt) { this.modeOfPaymentAlt = modeOfPaymentAlt; } public String getExtPrimaryPhysicianName() { return extPrimaryPhysicianName; } public void setExtPrimaryPhysicianName(String extPrimaryPhysicianName) { this.extPrimaryPhysicianName = extPrimaryPhysicianName; } public String getExtPrimaryPhysicianPhoneNumber() { return extPrimaryPhysicianPhoneNumber; } public void setExtPrimaryPhysicianPhoneNumber(String extPrimaryPhysicianPhoneNumber) { this.extPrimaryPhysicianPhoneNumber = extPrimaryPhysicianPhoneNumber; } public Boolean getIsDeleted() { return isDeleted; } public void setIsDeleted(Boolean isDeleted) { this.isDeleted = isDeleted; } public String getMetaCreatedByUser() { return metaCreatedByUser; } public void setMetaCreatedByUser(String metaCreatedByUser) { this.metaCreatedByUser = metaCreatedByUser; } public Date getMetaUpdatedDT() { return metaUpdatedDT; } public void setMetaUpdatedDT(Date metaUpdatedDT) { this.metaUpdatedDT = metaUpdatedDT; } public Date getMetaCreatedDT() { return metaCreatedDT; } public void setMetaCreatedDT(Date metaCreatedDT) { this.metaCreatedDT = metaCreatedDT; } @Override public int hashCode() { int hash = 0; hash += (patientKey != null ? patientKey.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won''t work in the case the id fields are not set if (!(object instanceof Patientinfo)) { return false; } Patientinfo other = (Patientinfo) object; if ((this.patientKey == null && other.patientKey != null) || (this.patientKey != null && !this.patientKey.equals(other.patientKey))) { return false; } return true; } @Override public String toString() { return "com.app.ehr.entities.Patientinfo[ patientKey=" + patientKey + " ]"; }}
答案1
小编典典我认为问题在于Spring在提交以下input
字段时不知道如何反序列化浏览器客户端发送的日期
<tr name="tstest"> <td>Date Of Birth</td> <td><form:input path="dateOfBirth" name="timestamp" value=""/> <a href="javascript:show_calendar(''document.tstest.timestamp'', document.tstest.timestamp.value);"><img src="../images/cal.gif" width="16" height="16" border="0" alt="Click Here to Pick up the timestamp"></a> </td></tr>
Spring不知道如何将您输入的值带入该字段并将其转换为Date
对象。您需要为此注册一个PropertyEditor
。例如,将以下内容添加到您的@Controller
课程中
@InitBinderpublic void initBinder(WebDataBinder binder) { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); sdf.setLenient(true); binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));}
显然,将更SimpleDateFormat
改为客户端发送的内容。
在相关说明中,您通过发送重定向发送302响应
return "redirect:/full-reg";
请记住,请求和模型属性仅在一个请求期间有效。因此,当您的客户将请求发送到时full-reg
,您最初发送的表单输入参数不再存在。您应该重新考虑如何执行此操作。
java – 使用spring jdbc模板填充结果
我有两节课
class Deptartment{
int deptid,String deptname;
List
现在我如何使用spring jdbc模板填充Department对象?
最佳答案
为了帮助Sean Patrick Floyd,这是他的解决方案,只需一个查询:
final MapsqlException {
Integer deptId = rs.getInt("deptid");
Department d = (Department) departments.get(deptId);
if (d == null) {
String deptName = rs.getString("deptname");
d = new Department();
d.setDeptId(deptId);
d.setDeptName(deptName);
departments.put(deptId,d);
}
Employee employee = new Employee();
employee.setEmpId(rs.getInt("empid"));
employee.setEmpName(rs.getString("empname"));
employee.setDeptId(deptId);
d.getEmployees().add(employee);
return employee;
}
});
List
它恰好更短,更有效.
java – 将多个表返回到spring jdbc模板的存储过程
如果我使用
jdbcTemplate.queryForList(myStoredProc,new Object [] {parameters}
我只从结果中得到第一张桌子.
我的数据库是sql Server 2005.
除了jdbcTemplate之外,还有其他方法可以满足我的要求.如果是,请告诉我.
提前致谢….
解决方法
本节中给出的示例完全适用于存储过程返回多个结果集的情况.虽然给出的示例是针对Oracle的,但它也应该以相同的方式为MS sql Server工作.
java-Spring @RequestBody:客户端发送的请求在语法上不正确
大家好,这是我在这里遇到的第一个问题,希望您能为我现在遇到的这个问题提供帮助.
我想使用JQuery将JSON对象发送到Spring Controller.
JSON对象的格式如下:
{"ssoArray":["21212", "231341"], "groupArray":["g10002", "g10003"]}
但是我收到了错误消息:客户端发送的请求在语法上不正确
我的环境:
>春季3.0.6
>杰克逊1.9.13
> JBoss 4.2
jQuery代码:
更新:添加了进行ajax调用的javascript方法的完整代码
function addRemoveAdmin(action, ssoArray, groupArray) {
var uri = actionPath + "/";
var jsonParameter = {"ssoArray":ssoArray, "groupArray":groupArray};
if(action == "add") {
uri = uri + addAdminAction;
} else {
uri = uri + removeAdminAction;
}
console.log(typeof jsonParameter);
$.ajax({
url:uri,
type:"POST",
data:jsonParameter,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(){
alert(data);
}
});
}
控制器代码:
@RequestMapping(value = "/addAdmin", method = RequestMethod.POST)
public String addAdmin(@RequestBody final AdminAndGroup personsAndGroups) throws Exception {
LOGGER.info("[RequestController] - addAdmin start");
LOGGER.info(personsAndGroups.toString());
return "OK";
}
映射类:
public class AdminAndGroup implements Serializable {
private static final long serialVersionUID = 9024455757311860269L;
private List<String> ssoArray;
private List<String> groupArray;
public AdminAndGroup(){}
public List<String> getSsoArray() {
return ssoArray;
}
public void setSsoArray(List<String> ssoArray) {
this.ssoArray = ssoArray;
}
public List<String> getGroupArray() {
return groupArray;
}
public void setGroupArray(List<String> groupArray) {
this.groupArray = groupArray;
}
@Override
public String toString() {
return "AdminAndGroup [ssoArray=" + ssoArray + ", groupArray="
+ groupArray + "]";
}
}
我已经使用java.util.List映射了JSON对象中的数组,但是我不确定这是否是解决问题的正确方法.
另外,我在Stack Overflow中进行了搜索,但没有找到有关如何在JSON对象中映射数组的示例.
提前致谢.
解决方法:
如果要发送json,则必须将对象转换为json.否则,jQuery会将其转换为参数字符串
data: JSON.stringify(jsonParameter)
Java学习笔记43(Spring的jdbc模板)
在之前的学习中,我们执行sql语句,需要频繁的开流,关流比较麻烦,为了更加的简化代码,我们使用Spring 的jdbc模板jdbcTemplate来简化我们的代码量;需要导入的包有:
我们在之前的druid连接池的基础上来使用该模板:
在这里先介绍一个Spring 的Test类;我们可以用它来完成代码的测试,不需要建立main方法来调用方法,直接测试;具体如下:
注意:导入junit.Test包,输入@Test报红字,然后alt+enter键导入Jutil包;不能是静态方法,否则不能执行;
可以发现在方法左边有运行图标,可以直接运行方法,不需要通过main方法;在jdbc模板中我们的不需要关其他的流,所以之前的连接池工具类我们需要做一下修改,添加一个获得连接池对象的方法;
package JDBCUtils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/*Druid连接池工具类*/
public class JDBCUtils {
private static DataSource ds;
// 静态代码块获取配置文件内容
static{
Properties p = new Properties();
InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
try {
p.load(in);
ds = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
}
// 创建获得连接对象方法
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 创建关闭方法 关闭方法中的conn.close()是归还连接对象给连接池,并不是释放资源
public static void close(Connection conn, PreparedStatement pre){
if (pre!=null) {
try {
pre.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 重载关闭方法
public static void close(Connection conn, PreparedStatement pre, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pre != null) {
try {
pre.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 重载关闭方法
public static void close(Connection conn){
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 创建获得连接池方法
public static DataSource getDateSource(){
return ds;
}
}
jdbc模板使用:
package com.zs.JdbcTemplate;
import JDBCUtils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
/*JdbcTemplate用法;*/
public class TemplateDemo {
JdbcTemplate jt=new JdbcTemplate(JDBCUtils.getDateSource());
// Junit单元测试可以让方法独立运行
// 插入数据方法
@Test
public void insert(){
String sql="insert into login value(?,?,?);";
int i = jt.update(sql, 3, "泰罗", "12345");
System.out.println(i);
}
// 修改数据方法
@Test
public void update(){
String sql="update login set sname = ? where id = ? ;";
int i = jt.update(sql, "赛文", 1);
System.out.println(i);
}
// 查询方法
@Test
public void select(){
String sql = "select * from login;";
// 执行查询语句将结果放入集合中,默认每一个结果用map集合来保存,用列名来做键
List<Map<String, Object>> maps = jt.queryForList(sql);
for (Map<String, Object> map : maps) {
System.out.println(map);
}
}
}
在之前我们将结果集封装到对象中,结果赋值语句需要先rs.getObject(),再将结果通过set方法赋值给对象,比较繁琐,在这里也有讲结果集赋值给对象的,我们先建对象类:
package com.zs.JdbcTemplate;
import java.util.Date;
public class Emp {
// 在创建对象的类中,为了防止赋值时出现数据不匹配的情况,尽量都使用引用类型,要注意与表数据类型一致
private Integer id;
private String ename;
private Integer job_id;
private Integer mgr;
private Date joindate;
private Double salary;
private Double bonus;
private Integer dept_id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Integer getJob_id() {
return job_id;
}
public void setJob_id(Integer job_id) {
this.job_id = job_id;
}
public Integer getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getJoindate() {
return joindate;
}
public void setJoindate(Date joindate) {
this.joindate = joindate;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Double getBonus() {
return bonus;
}
public void setBonus(Double bonus) {
this.bonus = bonus;
}
public Integer getDept_id() {
return dept_id;
}
public void setDept_id(Integer dept_id) {
this.dept_id = dept_id;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", ename=''" + ename + ''\'''' +
", job_id=" + job_id +
", mgr=" + mgr +
", joindate=" + joindate +
", salary=" + salary +
", bonus=" + bonus +
", dept_id=" + dept_id +
''}'';
}
}
将查询结果放入对象,再将对象放入集合:
package com.zs.JdbcTemplate;
import JDBCUtils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
/*JdbcTemplate用法;*/
public class TemplateDemo {
JdbcTemplate jt=new JdbcTemplate(JDBCUtils.getDateSource());// 将结果放入对象中,将对象放入集合中
@Test
public void select1(){
String sql = "select * from emp;";
List<Emp> rs = jt.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
for (Emp r : rs) {
System.out.println(r);
}
}
}
可以发现,不仅代码量少了,而且也不需要频繁开关流了
关于客户端发送的请求在语法上不正确。-Spring MVC + JDBC模板和客户端发送请求时,请求类型可以省略的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于java – 使用spring jdbc模板填充结果、java – 将多个表返回到spring jdbc模板的存储过程、java-Spring @RequestBody:客户端发送的请求在语法上不正确、Java学习笔记43(Spring的jdbc模板)的相关信息,请在本站寻找。
本文标签: