SpringMVC和Ajax错误406
我试图用SpringMVC运行一个ajax方法,但是我得到了错误406:“这个请求标识的资源只能根据请求“accept”头生成具有不可接受特征的响应” 控制器:SpringMVC和Ajax错误406,ajax,spring,spring-mvc,Ajax,Spring,Spring Mvc,我试图用SpringMVC运行一个ajax方法,但是我得到了错误406:“这个请求标识的资源只能根据请求“accept”头生成具有不可接受特征的响应” 控制器: @Transactional @Controller("user") @SessionAttributes("user") public class HomeController { @Autowired private UserDAO daoUser; @Autowired private EnterpriseDAO daoEnter
@Transactional
@Controller("user")
@SessionAttributes("user")
public class HomeController {
@Autowired
private UserDAO daoUser;
@Autowired
private EnterpriseDAO daoEnterprise;
@Autowired
private FuncDAO daoFunc;
@Autowired
private LastPeriodDAO daoLastPeriod;
@RequestMapping("/")
public String index() {
return "redirect:menu";
}
@RequestMapping(value = "/menu", method = RequestMethod.GET)
public ModelAndView menu(@ModelAttribute("user") User user, Enterprise enterprise) {
ModelAndView mav = new ModelAndView("user/menu");
Func func = daoFunc.getFunc(user);
mav.addObject("func", func);
mav.addObject("enterprise", enterprise);
mav.addObject("enterpriseList", daoEmpresa.listEnterprise(func));
return mav;
}
@RequestMapping(value = "/dynamicMenu", method = RequestMethod.POST)
public @ResponseBody List<LastPeriod> dynamicOption(@ModelAttribute("enterprise") Enterprise enterprise) {
System.out.println(enterprise.getCnpj());
List<LastPeriod> options = daoLastPeriod.getLastPeriod(enterprise);
System.out.println(options.size());
return options;
}
}))
表格:
<form:form modelAttribute="enterprise" commandName="enterprise" class="form-horizontal" method="POST">
<fieldset>
<legend>Olá, ${func.name}</legend>
<!-- Select enterprise -->
<div class="form-group">
<label for="enterprise">Enterprise</label>
<form:select path="cnpj" class="form-control">
<form:option value="0" label=" Select"/>
<form:options items="${enterpriseList}" itemValue="cnpj"/>
</form:select>
</div>
</form:form>
Olá,${func.name}
企业
拜托,有人有办法吗
编辑
包含的控制器和表格406表示“不可接受”。发送请求时尝试添加标题内容类型:
$.ajax({
type: 'POST',
headers:{
'Content-type:application/x-www-form-urlencoded'
},
url: 'dynamicMenu',
data: enterprise,
})
.done(function(data) {
console.log("success");
console.log(data)
})
.fail(function() {
console.log("error");
});
application/x-www-form-urlencoded从本质上讲,错误消息表示服务器无法生成AJAX调用可接受的响应类型。服务器希望您的“Accept”头包含一个它可以生成响应的类型 尝试在AJAX调用中设置“Accept”标题:
$.ajax({
type: 'POST',
headers:{
'Accept:application/json'
},
...
})
请注意标题之间的差异
另一条评论要求您设置内容类型,但您发布的错误消息似乎表明您需要设置“接受”标题。因此,这是您的问题 您需要返回
jsonObject
,但实际上您返回的是LastPeriod对象的列表,即List
所以你需要改变方法
@RequestMapping(value = "/dynamicMenu", method = RequestMethod.POST)
public @ResponseBody List<LastPeriod> dynamicOption(@ModelAttribute("enterprise") Enterprise enterprise) {
List<LastPeriod> options = daoLastPeriod.getLastPeriod(enterprise);
JSONArray jsonArray = new JSONArray();
for(LastPeriod lastPeriod: options){
JSONObject jsonObject = new JSONObject();
//Here put data in jsonObject from lastPeriod like
jsonObject.put("name", "populate field from lastPeriod");
jsonArray.add(jsonObject);
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("data", jsonArray);
return jsonObject.toJSONString();
}
首先谢谢你的帮助 我在spring配置中遇到了一个问题,它被配置为
jsonviewsolver
,configureContentNegotiation
,contentnegotingviewresolver
。我想我必须在控制器上指定一个返回
正如我所需要的,JSON忽略了这些设置,现在正在工作
个人,首先谢谢你的帮助
我在spring配置中遇到了一个问题,它被配置为JsonViewResolver、configureContentNegotiation、contentNegotiatingViewResolver。我想我必须在控制器上指定一个返回
正如我所需要的,JSON忽略了这些设置,现在正在工作
我还更改了我的方法,因为它不需要接收对象,只需要一个id。因此它看起来像这样:
@RequestMapping(value = "/dynamicMenu/{cnpj}", method = RequestMethod.GET)
public @ResponseBody List<UltimoPeriodoAberto> DynamicOptions(@PathVariable final String cnpj) {
return daoLastPeriod.getLastPeriod(new Enterprise(cnpj));
}
@RequestMapping(value=“/dynamicMenu/{cnpj}”,method=RequestMethod.GET)
public@ResponseBody列表动态选项(@PathVariable最终字符串cnpj){
返回daoLastPeriod.getLastPeriod(新企业(cnpj));
}
请求ajax:
var cnpj = $(this).val();
$.ajax({
type: 'get',
url: 'http://localhost:8080/myincome/dynamicMenu/' + cnpj,
})
.done(function(data) {
console.log("success");
console.log(data[0]);
for ( var i = 0; i < data.length; i++) {
console.log(data[i].description);
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log("The following error occured: " + textStatus, errorThrown);
});
var cnpj=$(this.val();
$.ajax({
键入:“get”,
网址:'http://localhost:8080/myincome/dynamicMenu/“+cnpj,
})
.完成(功能(数据){
控制台日志(“成功”);
console.log(数据[0]);
对于(变量i=0;i
非常感谢。我添加了行“headers”,内容类型:application/x-www-form-urlencoded',但仍然有相同的错误。可能是这个jquery序列化有问题。尝试硬编码,只是为了测试。尝试数据:“field1=value1&field2&value2“
我在控制器上做了一个返回字符串的测试,它成功了。。。问题是当我试图返回一个对象列表时……从第一篇文章开始,我就知道你在发送数据时有问题,现在你说你在返回对象列表时确实有问题。请给我你的表格和Enterprise
课程。你到底想向管理员发送什么?var enterprise=$(this).serialize();这就是表单序列化发生的地方吗?我正在发送用户选择的公司的id。此id是访问选项列表的参数。当我得到id并实现查询时。该错误发生在请求的响应中,该请求无法发送该列表以使用javascript装载元素。如果您发送的id
类型为string或long,则控制器方法不应将@modeldattribute(“企业”)enterprise
作为输入。那么,您是否要将模型对象发送回控制器?我正在将ajax请求作为企业对象。我会把控制员和表格放在邮局。
@RequestMapping(value = "/dynamicMenu/{cnpj}", method = RequestMethod.GET)
public @ResponseBody List<UltimoPeriodoAberto> DynamicOptions(@PathVariable final String cnpj) {
return daoLastPeriod.getLastPeriod(new Enterprise(cnpj));
}
var cnpj = $(this).val();
$.ajax({
type: 'get',
url: 'http://localhost:8080/myincome/dynamicMenu/' + cnpj,
})
.done(function(data) {
console.log("success");
console.log(data[0]);
for ( var i = 0; i < data.length; i++) {
console.log(data[i].description);
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log("The following error occured: " + textStatus, errorThrown);
});