嗨,所以我有問題從我的表單獲得JSON與我的工作與春天mvc。我的表單是動態的,JSON返回爲用戶在表單上填寫的條件列表。理想情況下,我希望能夠通過包含Criteria對象列表的Criterias對象來獲取JSON。 (就像我的模型類下面)我不知道這是可能的,或者如果有不同的方式去了解它,但任何建議將不勝感激。ajax json發佈到春季mvc控制器「415不支持的媒體類型」
**目前,我正在從ajax帖子收到415個不受支持的媒體類型。
CONTROLLER
@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");
}
MODEL
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>
UPDATE
我試圖做一些更簡單的事情來縮小這個問題,從我查過的東西看來,它似乎是傑克遜映射的問題。以下代碼也會產生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();
}
}
MODEL
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>
它看起來像你的函數只捕獲一個標準組,所以不是返回{「標準」:[{「field」:「a」,「filter」:「Contains」},{「field」:「其他字段值」 ,「filter」:「一些其他的過濾器值」}]} 它只返回我的表單上選擇的最後一行。所以像這樣{「criteria」:[{field name and values}]} –
這是因爲您的表單中只有一個字段和一個過濾器。如果'serializeArray'返回許多字段和許多過濾器,它們將被放入返回的JSON字符串中。至於你的主要問題,讓我知道我是否清楚地向你解釋了爲什麼你從你的請求中獲得'415不支持的媒體類型'的根本原因。 – Bnrdo
我的表單中有超過字段和過濾器嗎?如果你運行代碼片段,你會看到如果你點擊添加條件,它會爲表單添加新的字段過濾器和值。我試着回溯,並試圖看看我是否可以只將一個對象映射到我的JSON,而我仍然收到415不受支持的媒體類型錯誤 –