我遇到了从我的表单中获取JSON到使用spring mvc工作的问题。我的表单是动态的,JSON作为保存的对象返回。在处理案件的同时不断获得415错误,即不支持媒体类型。请帮助我,下面是我的代码流程。我也尝试了不同的方法,但没有什么对我有用,我做错了?
<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;
}
}
答案 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)
我注意到你的代码中有一些要点
在JQuery代码中,您传递的是contentType:'application / json'两次,一个在头部内部,另一个在头部外部,可以删除外部contentType:'application / json'并尝试它。
尝试在控制器中使用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>
现在我的工作正常。