Java SpringMVC:long类型的表单字段的空值导致400个错误请求

Java SpringMVC:long类型的表单字段的空值导致400个错误请求,java,forms,spring,parsing,spring-mvc,Java,Forms,Spring,Parsing,Spring Mvc,我正在尝试提交一个包含以下字段的表单 private String type; private long minPrice; private long maxPrice; 当long类型的两个字段中的一个为空时,for submission将导致400个错误请求(对于非空字段,可以正常工作) 我得到一个错误: 默认消息[minPrice]];默认消息[转换失败] 类型为“java.lang.String”的属性值为的必需类型“long” 属性“minPrice”;嵌套异常为 java.lang

我正在尝试提交一个包含以下字段的表单

private String type;
private long minPrice;
private long maxPrice;
long
类型的两个字段中的一个为空时,for submission将导致400个错误请求(对于非空字段,可以正常工作)

我得到一个错误:

默认消息[minPrice]];默认消息[转换失败]
类型为“java.lang.String”的属性值为的必需类型“long”
属性“minPrice”;嵌套异常为
java.lang.NumberFormatException:对于输入字符串:“”

据我所知,它试图将空字符串解析为键入
long
,否则我错了

现在,我应该怎么做才能在
long
类型字段的值为
null
的情况下提交此表单

(我正在使用Spring 4.0)

使用类而不是原语类型
long
,您将能够检查
null
值,以便处理它们并避免错误的请求错误

@RequestMapping(value="/your_path", method = RequestMethod.GET)
public String myControllerFunction(
        @RequestParam("minPrice") Long min,
        @RequestParam("minPrice") Long max,
        @RequestParam("type") String type) {

    // your controller code
}

您应该使用类“Long”而不是类型“Long”,因为基元类型不能有空值。

我有一个不同的情况,下面是代码摘录:

@Consumes(MediaType.MULTIPART_FORM_DATA)
@PermitAll
@Path("uploadSiteDocument")
void uploadSiteDocument(@FormDataParam("siteId") Long siteId,
                        @FormDataParam("fileTypeId") Long fileTypeId,
                        @FormDataParam("description") String description,
                        @FormDataParam("file") InputStream uploadedInputStream,
                        @FormDataParam("file") FormDataContentDisposition fileDetail,
                        @FormDataParam("file") FormDataBodyPart body,
                        @FormDataParam("primaryConnection") Long pcId,
                        @FormDataParam("internalSolution") Long isId)
        throws IOException, RepositoryException;
通过Postman,此服务仅在最后两个参数为空(不是空值而是空的)时工作

只有两种解决方案:

  • 在前端检查这些值是否为空,并将它们设置为空字符串
  • 或者,将这两个Long声明为字符串类型,并在后端解析它们
  • 解决方案2:

    ...@FormDataParam("primaryConnection") **String** pcId,
       @FormDataParam("internalSolution") **String** isId)