在 spring 框架中使用 ajax 发送数据时出现 400 错误请求
400 bad request while sending data with ajax in spring framework
正在尝试将 JavaScript 对象传递给 Spring MVC。我收到 400 错误请求错误。尝试了所有不同的方法,但仍然没有运气。我附加了 Controller,我在 JS 中传递的对象和 Java 以及响应。将不胜感激任何帮助。当我将 @RequestBody 更改为 @ModelAttribute 时,我在控制器中收到参数,但整数为零且数组为空。
控制器
@RequestMapping(value="/getInstrumentsByTypeMakeModel" , method=RequestMethod.GET)
public @ResponseBody List<Instrument> getInstrumentsByTypeMakeModel(@RequestBody SearchInstrument search) {
// do Something and create searchResult;
return searchResult;
}
Java脚本
var searchInstrument = {
operator: siteOperator,
companyId:loggedInUserCompanyId ,
isServiceProvider:isServiceProvider ,
types:selectedType,
makes:selectedMake,
models:selectedModel,
typeOthers:selectedTypeOther,
makeOthers:selectedMakeOther,
modelOthers:selectedModelOther
};
jQuery.ajax({
url:server_name+ "/getInstrumentsByTypeMakeModel",
type: "GET",
dataType: "JSON",
data:JSON.stringify(searchInstrument),
contentType: 'application/json; charset=utf-8',
success: function(resultData) {
console.log(resultData);
},
error: function(jqXHR, status) {
// error handler
}
});
SearchInstrument Class
public class SearchInstrument {
public SearchInstrument(){
}
public SearchInstrument(int operator,int companyId, boolean isServiceProvider,
List<Integer> types,List<Integer> makes, List<Integer> models,
List<String> typeOthers,List<String> makeOthers,List<String> modelOthers
){
this.operator=operator;
this.companyId=companyId;
this.types=types;
this.makes=makes;
this.models=models;
this.typeOthers=typeOthers;
this.makeOthers=makeOthers;
this.modelOthers=modelOthers;
}
private int operator;
private int companyId;
private boolean isServiceProvider;
private List<Integer> types=new ArrayList<Integer> ();
private List<Integer> makes=new ArrayList<Integer> ();
private List<Integer> models=new ArrayList<Integer> ();
private List<String> typeOthers=new ArrayList<String> ();
private List<String> makeOthers=new ArrayList<String> ();
private List<String> modelOthers=new ArrayList<String> ();
//getters and setters
}
[这是参数][https://i.stack.imgur.com/2cxde.png]
[这是 URL:][https://i.stack.imgur.com/BPMaS.png]
我不完全确定,但合并 GET 请求并尝试传递对象似乎不是最好的主意,这就是为什么您在 url,在第二张图片中。
下面question有更详尽的解释
我认为您应该尝试将其转换为 POST 请求。
或者,如果出于您的原因您仍想将其保留为 GET,则应将对象作为参数传递给 URL 并在控制器中使用 @RequestParam。
正在尝试将 JavaScript 对象传递给 Spring MVC。我收到 400 错误请求错误。尝试了所有不同的方法,但仍然没有运气。我附加了 Controller,我在 JS 中传递的对象和 Java 以及响应。将不胜感激任何帮助。当我将 @RequestBody 更改为 @ModelAttribute 时,我在控制器中收到参数,但整数为零且数组为空。
控制器
@RequestMapping(value="/getInstrumentsByTypeMakeModel" , method=RequestMethod.GET)
public @ResponseBody List<Instrument> getInstrumentsByTypeMakeModel(@RequestBody SearchInstrument search) {
// do Something and create searchResult;
return searchResult;
}
Java脚本
var searchInstrument = {
operator: siteOperator,
companyId:loggedInUserCompanyId ,
isServiceProvider:isServiceProvider ,
types:selectedType,
makes:selectedMake,
models:selectedModel,
typeOthers:selectedTypeOther,
makeOthers:selectedMakeOther,
modelOthers:selectedModelOther
};
jQuery.ajax({
url:server_name+ "/getInstrumentsByTypeMakeModel",
type: "GET",
dataType: "JSON",
data:JSON.stringify(searchInstrument),
contentType: 'application/json; charset=utf-8',
success: function(resultData) {
console.log(resultData);
},
error: function(jqXHR, status) {
// error handler
}
});
SearchInstrument Class
public class SearchInstrument {
public SearchInstrument(){
}
public SearchInstrument(int operator,int companyId, boolean isServiceProvider,
List<Integer> types,List<Integer> makes, List<Integer> models,
List<String> typeOthers,List<String> makeOthers,List<String> modelOthers
){
this.operator=operator;
this.companyId=companyId;
this.types=types;
this.makes=makes;
this.models=models;
this.typeOthers=typeOthers;
this.makeOthers=makeOthers;
this.modelOthers=modelOthers;
}
private int operator;
private int companyId;
private boolean isServiceProvider;
private List<Integer> types=new ArrayList<Integer> ();
private List<Integer> makes=new ArrayList<Integer> ();
private List<Integer> models=new ArrayList<Integer> ();
private List<String> typeOthers=new ArrayList<String> ();
private List<String> makeOthers=new ArrayList<String> ();
private List<String> modelOthers=new ArrayList<String> ();
//getters and setters
}
[这是参数][https://i.stack.imgur.com/2cxde.png]
[这是 URL:][https://i.stack.imgur.com/BPMaS.png]
我不完全确定,但合并 GET 请求并尝试传递对象似乎不是最好的主意,这就是为什么您在 url,在第二张图片中。
下面question有更详尽的解释
我认为您应该尝试将其转换为 POST 请求。
或者,如果出于您的原因您仍想将其保留为 GET,则应将对象作为参数传递给 URL 并在控制器中使用 @RequestParam。