【发布时间】:2015-10-13 23:25:42
【问题描述】:
您好,我在将 JSON 从表单中获取到使用 spring mvc 工作时遇到问题。我的表单是动态的,JSON 作为用户在表单上填写的条件列表返回。理想情况下,我希望能够将 JSON 作为包含 Criteria 对象列表的 Criterias 对象。 (就像我下面的模型类)我不知道这是否可能,或者是否有不同的方法可以解决它,但任何建议都将不胜感激。
**目前我收到来自 ajax 帖子的 415 不受支持的媒体类型。
控制器
@RestController
public class Controller {
@RequestMapping(value-"/test",method=RequestMethod.GET
public ModelAndView getTest(){
ModelAndView model = new ModelAndView("test");
}
@RequestMapping(value-"/query",method=RequestMethod.POST
public ModelAndView submitTest(@RequestBody Criterias criterias){
//do stuff....
ModelAndView model = new ModelAndView("results");
}
型号
public class Criterias{
private List<Criteria> criteria = new ArrayList<Criteria>();
getter setter...
}
public class Criteria{
private String field;
private String filter;
private String operator;
private String criteria;
getters setters...
}
TEST.JSP
$(document).ready(function() {
$("#theButton").click(function() {
$('#myTable').append("<tr><td><select name = 'operator'><option>AND</option><option>OR</option></select></td><td>Field:<select name='field'><option>a</option><option>b</option> <option>c</option> <option>d</option> </select> </td> <td> <select name='filter'> <option>Contains</option> <option>Does Not Contain</option> <option>Equals</option> <option>Does Not Equal</option> </select> </td><td> <input name='criteria' type='text'> </td><td><button type ='button' class ='rm' title = 'Remove Row'/></td></tr>")
});
$("#myTable").on('click', '.rm', function() {
$(this).parent().parent().remove();
});
});
function post() {
$.ajax({
type: "POST",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: "query",
data: JSON.stringify($('form').serializeArray())
})
};
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
</head>
<form>
<table>
<tbod>
<tr>
<td>Field:
<select name='field'>
<option>a</option>
<option>b</option>
<option>c</option>
<option>d</option>
</select>
</td>
<td>
<select name='filter'>
<option>Contains</option>
<option>Does Not Contain</option>
<option>Equals</option>
<option>Does Not Equal</option>
</select>
</td>
<td>
<input name='criteria' type='text'>
</td>
</tr>
</tbod>
</table>
<table id='myTable'>
<tbody>
</tbody>
</table>
<input type="button" value="search" onclick="return post();">
<input type="button" id="theButton" value="Add Criteria">
</form>
更新
我试图做一些更简单的事情来缩小问题范围,从我查找的内容来看,这似乎是杰克逊映射的问题。以下代码也会产生 415 错误。
控制器
@RestController
public class Rest{
@RequestMapping(value="/testModel",method=RequestMethod.GET)
public ModelAndView getTestModel(){
return new ModelAndView("testModel");
}
@RequestMapping(value="/sendTestModel",method=RequestMethod.POST)
public String submiteTestModel(@RequestBody TestModel test){
return test.getName();
}
}
型号
public class TestModel{
private String id;
private String name;
//getters setters....
}
testModel.jsp
function post() {
$.ajax({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
type: "POST",
contentType: 'application/json;,
dataType: '
json ',
url: "sendTestModel",
data: JSON.stringify({id:"1",name:"Bob"})
})
};
<Html>
<input type="button" value="search" onclick="return post();"/>
</Html>
【问题讨论】:
标签: jquery json ajax spring spring-mvc