Javascript spring mvc ajax错误请求错误
弹簧控制器方法:Javascript spring mvc ajax错误请求错误,javascript,java,ajax,spring,spring-mvc,Javascript,Java,Ajax,Spring,Spring Mvc,弹簧控制器方法: @RequestMapping(value="/checklist/{id}",method=RequestMethod.PUT, consumes=MediaType.APPLICATION_JSON_VALUE , produces=MediaType.APPLICATION_JSON_VALUE) @ResponseBody public Checklist update(@RequestBody Checklist checklist, @Pat
@RequestMapping(value="/checklist/{id}",method=RequestMethod.PUT, consumes=MediaType.APPLICATION_JSON_VALUE , produces=MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Checklist update(@RequestBody Checklist checklist, @PathVariable("id") int id)
{
checklist.setId(id);
return service.update(checklist);
}
JavaScript AJAX代码:
var checklist={name:$('#newName').val(), details:$('#newDetails').val()};
$.ajax({ //send updated item values to
method:'put',
url:'/tracker/checklist/'+$(editingItem).attr('id'),
contentType:'application/json',
dataType:'json',
data:checklist,
success:function(data)
{
console.log(data);
$('#myModal').modal('hide');
}
});
检查表模型:
package com.tracker.web.models;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
@Entity
@Table(name="checklists")
public class Checklist {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private int item_order;
private String name;
private String details;
private String phase;
private String completed;
private String skipped_note;
private Date completed_on;
private int completed_by;
@Temporal(TemporalType.TIMESTAMP)
@CreationTimestamp
private Date created_at;
@Temporal(TemporalType.TIMESTAMP)
@UpdateTimestamp
private Date updated_at;
@ManyToOne
private Event event;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getItem_order() {
return item_order;
}
public void setItem_order(int item_order) {
this.item_order = item_order;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
public String getPhase() {
return phase;
}
public void setPhase(String phase) {
this.phase = phase;
}
public String getCompleted() {
return completed;
}
public void setCompleted(String completed) {
this.completed = completed;
}
public String getSkipped_note() {
return skipped_note;
}
public void setSkipped_note(String skipped_note) {
this.skipped_note = skipped_note;
}
public Date getCompleted_on() {
return completed_on;
}
public void setCompleted_on(Date completed_on) {
this.completed_on = completed_on;
}
public int getCompleted_by() {
return completed_by;
}
public void setCompleted_by(int completed_by) {
this.completed_by = completed_by;
}
public Date getCreated_at() {
return created_at;
}
public void setCreated_at() {
this.created_at = new Date();
}
public Date getUpdated_at() {
return updated_at;
}
public void setUpdated_at() {
this.updated_at = new Date();
}
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
this.event = event;
}
}
我使用的是jQuery1.11。当我在客户端使用“GET”而不是“PUT”方法,在服务器端使用“consumes”时,它就工作了。甚至我在发送时也尝试了JSON.stringify。我在服务器端使用jackson将数据转换为json,您使用的是哪个版本的jquery 如果您使用的是1.9.0之前的jquery,请尝试在ajax调用中键入
而不是方法:'PUT'
,它应该可以工作。否则,它应该使用方法:“put”
查看文档以获取更多参考您没有从AJAX传递“checklist”参数,它是控制器方法中的强制参数。要么将“检查表”标记为可空,要么使用查询中的正确名称传递它—您指的是来自ajax的数据。数据:{“名称”:“项目1”}。我想把它映射到清单模型。或者我应该这样通过——检查表={“name”:“item1”};资料:检查表;使用字符串作为数据类型(检查表),然后使用jackson将json从该字符串转换为Java,或者参考此内容。请发布您的检查表类别。您可以详细说明“当我使用‘GET’而不是‘PUT’时”的含义吗。您的意思是更改jQuery中的方法:'put'
属性还是更改method=RequestMethod.put
?