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