如何告诉请求 getparameter 将空值视为 0?

How do I tell request getparameter to treat null value as 0?

所以我目前正在 spring 引导中进行 crud,我被困在这个地方,我想将 null id 视为 0,我尝试了以下版本并且它 returns

`java.lang.NumberFormatException: For input string: ""`

   @ResponseBody
    public String checkMobileEmail(HttpServletRequest req, Model model) {
        String mobile = req.getParameter("mobile");
        String email = req.getParameter("email");
        Long id = Long.parseLong(req.getParameter("id"));
        if (req.getParameter("id").equals("")) {
            id  = 0L;
        } 
        System.err.println("id : " + id + " mobile : " + mobile + " email: " + email);
        return service.findByEmailAndMobile(email,mobile,id);
    }

你必须避免在 if 条件之前 Long.parseLong(req.getParameter("id")); 如下:

@ResponseBody
public String checkMobileEmail(HttpServletRequest req, Model model) {
   String mobile = req.getParameter("mobile");
   String email = req.getParameter("email");
   String idParameter = req.getParameter("id");
   Long id = 0L;
   if (idParameter != null && !idParameter.equals("")) {
       id = Long.parseLong(idParameter);
   } 
   System.err.println("id : " + id + " mobile : " + mobile + " email: " + email);
   return service.findByEmailAndMobile(email,mobile,id);
}

您需要在调用 Long.parseLong 之前检查 id 是否为空或 null,否则会抛出异常。

Long id;
if (StringUtils.hasText(req.getParameter("id")) {
    Long.parseLong(req.getParameter("id"));
} else {
    id  = 0L;
}

如果参数既不是 empty/null 也不是数字,您仍然会以异常结束。我建议捕获异常并适当处理它。

try {
    Long.parseLong(req.getParameter("id"))
} catch(NumberFormatException e) {
    // log.warn(e) 
    return Collections.emptyList();
}