Java 弹簧参数太长
我正在用Spring创建RESTful应用程序。上面的方法工作得很好,但是当数据包长度超过一定长度时,它将导致错误。错误是说 分析HTTP请求头时出错注意:HTTP的进一步出现 标头解析错误将在调试级别记录 我需要将数据包作为参数传递,数据包本身将是一个json文件,我将其转换为字符串 数据包文件可能非常复杂和庞大。我如何解决这个问题 以下是请求的示例:Java 弹簧参数太长,java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,我正在用Spring创建RESTful应用程序。上面的方法工作得很好,但是当数据包长度超过一定长度时,它将导致错误。错误是说 分析HTTP请求头时出错注意:HTTP的进一步出现 标头解析错误将在调试级别记录 我需要将数据包作为参数传递,数据包本身将是一个json文件,我将其转换为字符串 数据包文件可能非常复杂和庞大。我如何解决这个问题 以下是请求的示例: @RequestMapping(value = "/createItem", method = RequestMethod.POST)
@RequestMapping(value = "/createItem", method = RequestMethod.POST)
@Override
public void createItem(@RequestParam(value="userId") String userId, @RequestParam(value="title") String title, @RequestParam(value="subtitle") String subtitle, @RequestParam(value="description") String description, @RequestParam(value="category") String category, @RequestParam(value="datapack") String datapack) {
this.itemDAO.createItem(userId, title, subtitle, description, category, datapack);
}
上面的例子是可行的,但如果我使用更长的JSON文件进行测试,它将不起作用。创建一个控制器方法,该方法将使用XHR(AJAX)接收$http服务发布的JSON数据 创建映射到JSON对象的POJO
@RequestMapping(value = "/savecompany_json", method = RequestMethod.POST)
public @ResponseBody String saveCompany_JSON( @RequestBody Company company ) {
//
// Code processing the input parameters
//
return "JSON: The company name: " + company.getName() + ", Employees count: " + company.getEmployees() + ", Headoffice: " + company.getHeadoffice();
}
如果请求非常大(例如发送文件时),您可能需要更改http头中的内容类型。例如(尽管根据您实际发送的内容,外观可能会有所不同): 然后,如果请求太大,服务器无法接受,则可能需要扩展请求大小限制。如果您使用的是spring boot,则可以转到application.properties文件(应位于src/main/resources下,但如果该文件尚不存在,请手动创建),并添加以下属性:
$http({
method: 'POST',
url: url,
headers: {
'Content-Type': 'multipart/form-data'
},
data: {
data: model,
file: file
}
});
无论如何,您都在使用POST请求,因此只需使用内容类型application/x-www-form-URL将参数发送到正文中,就像普通表单提交一样,而不是发送到URL中。您使用的是什么应用程序服务器?是spring boot吗?如何形成http请求?你只是提交一个表单还是通过javaScript生成的?你传输的数据到底有多大?它是如此之大以至于必须被拆分成多个HTTP包吗?是的,它的spring引导。我用角形符号表示请求。即使我直接从浏览器生成请求,它仍然不起作用。你知道如何分割包吗?这是angular的请求吗?是的,这是angular中处理请求的方式
public class Company {
private String name;
private long employees;
private String headoffice;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getEmployees() {
return employees;
}
public void setEmployees(Long employees) {
this.employees = employees;
}
public String getHeadoffice() {
return headoffice;
}
public void setHeadoffice(String headoffice) {
this.headoffice = headoffice;
}
}
$http({
method: 'POST',
url: url,
headers: {
'Content-Type': 'multipart/form-data'
},
data: {
data: model,
file: file
}
});
multipart.maxFileSize=3MB
multipart.maxRequestSize=3180KB