Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧参数太长_Java_Spring_Rest_Spring Mvc - Fatal编程技术网

Java 弹簧参数太长

Java 弹簧参数太长,java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,我正在用Spring创建RESTful应用程序。上面的方法工作得很好,但是当数据包长度超过一定长度时,它将导致错误。错误是说 分析HTTP请求头时出错注意:HTTP的进一步出现 标头解析错误将在调试级别记录 我需要将数据包作为参数传递,数据包本身将是一个json文件,我将其转换为字符串 数据包文件可能非常复杂和庞大。我如何解决这个问题 以下是请求的示例: @RequestMapping(value = "/createItem", method = RequestMethod.POST)

我正在用Spring创建RESTful应用程序。上面的方法工作得很好,但是当数据包长度超过一定长度时,它将导致错误。错误是说

分析HTTP请求头时出错注意:HTTP的进一步出现 标头解析错误将在调试级别记录

我需要将数据包作为参数传递,数据包本身将是一个json文件,我将其转换为字符串

数据包文件可能非常复杂和庞大。我如何解决这个问题

以下是请求的示例:

@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