415不支持的媒体类型“错误

时间:2018-02-15 07:41:41

标签: ajax spring-mvc

我遇到了从我的表单中获取JSON到使用spring mvc工作的问题。我的表单是动态的,JSON作为保存的对象返回。在处理案件的同时不断获得415错误,即不支持媒体类型。请帮助我,下面是我的代码流程。我也尝试了不同的方法,但没有什么对我有用,我做错了?

enter image description here HTML表格

        <form:form modelAttribute="bp" action="saveUser" method="post" 
   name="bpForm" id="submitForm">


    <div class="form-group form-inline">
        <label>Name</label>
        <form:input type="text" path="bpName" name="bpName"
        class="form-control" />
    </div>
    <button type="submit" class="btn btn-success"
                            >save</button>          
    </form:form>

JQUERY CODE    ################################################## #########

     <script type="text/javascript">
        data = "";

    $(document).ready(function() {
        console.log("ready ....");
        $('#submitForm').submit(function(e) {


            var frm = $('#submitForm');
            e.preventDefault();
            console.log("submitting ....");
            var data = {}
            var Form = this;

            //Gather Data also remove undefined keys(buttons)
            $.each(this, function(i, v){
                    var input = $(v);
                data[input.attr("name")] = input.val();
                delete data["undefined"];
            });
            console.log("JSON : "+JSON.stringify(data))
        $.ajax({
             headers: { 
                    'Accept': 'application/json',
                    'Content-Type': 'application/json' 
                },

            type: frm.attr('method'),
            url: frm.attr('action'),
            dataType : 'json',
            data : JSON.stringify(data),
            success : function(callback){
                alert("Response: Name:");
               // $(this).html("Success!");
            },
            error : function(){
              //  $(this).html("Error!");
            }
        });
        });
    });
</script>

############################################### ####################### CONTROLLER

 @RequestMapping(value="/saveUser", method = RequestMethod.POST)
public @ResponseBody BusinessPartner  submittedFromData(@RequestBody BusinessPartner user, HttpServletRequest request) {
    System.out.println("!!!!!!!!!!!! ==================="+user.getBpId());
    return user;
}   

####################################

模特课程

@Entity
@Table(name="bp_master")
public class BusinessPartner {


@Id
//@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="BPId")
private int bpId;

@Column(name="BPName")
private String bpName;



public BusinessPartner(){

}

public BpType getBpType() {
    return bpType;
}

public void setBpType(BpType bpType) {
    this.bpType = bpType;
}

public int getBpId() {
    return bpId;
}

public void setBpId(int bpId) {
    this.bpId = bpId;
}

public String getBpName() {
    return bpName;
}

public void setBpName(String bpName) {
    this.bpName = bpName;
}


}

3 个答案:

答案 0 :(得分:0)

在您的控制器中尝试修改添加consumes属性的方法并删除HttpServletRequest参数:

 @RequestMapping(value="/saveUser", method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody BusinessPartner  submittedFromData(@RequestBody BusinessPartner user) {
    System.out.println("!!!!!!!!!!!! ==================="+user.getBpId());
    return user;
} 

并以您的格式html:

<div class="form-group form-inline">
        <label>Name</label>
        <form:input type="text" path="bpName" name="bpName"
        class="form-control" />
       <form:input type="hidden" path="bpId" name="bpId"
        class="form-control" />
    </div>

或尝试在您的ajax请求中发送application / x-www-form-urlencoded并使用MultiValueMap捕获它

$.ajax({
         headers: { 

                'Content-Type': 'application/x-www-form-urlencoded' 
            },

        type: frm.attr('method'),
        url: frm.attr('action'),
        dataType : 'application/x-www-form-urlencoded',
        data : data ,
        success : function(callback){
            alert("Response: Name:");
           // $(this).html("Success!");
        },
        error : function(){
          //  $(this).html("Error!");
        }

@RequestMapping(value="/saveUser", method = RequestMethod.POST)
        public @ResponseBody BusinessPartner  submittedFromData(@RequestBody MultiValueMap<String, String > data) {
 Map<String, String> params = data.toSingleValueMap();
            System.out.println("!!!!!!!!!!!! ==================="+params.get("bpName"));
            return user;
        } 

答案 1 :(得分:0)

我注意到你的代码中有一些要点

  1. 在JQuery代码中,您传递的是contentType:'application / json'两次,一个在头部内部,另一个在头部外部,可以删除外部contentType:'application / json'并尝试它。

  2. 尝试在控制器中使用comsumes for application / json或其他代表性数据格式。

答案 2 :(得分:0)

我刚刚使用了这个maven依赖,415响应代码消失了。仅重复的contentType:'application / json'已删除,现已编辑。

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.3</version>
  </dependency>

现在我的工作正常。