如何捕获错误请求的异常

时间:2018-02-09 08:06:22

标签: java rest spring-mvc exception-handling bad-request

发送以下请求时,我无法捕获异常。 empno数据类型很长。但我发送超过最大值的长期。即使我在我的pojo课程中尝试@Min@Max注释,但它无法正常工作。根据我的要求,我不应该使用字符串而不是长。

{
    "empno": 135458464765456464654564654566
}


public class Personal
{
    private long empNo;
    public void setEmpNo(long empNo)
    {
        this.empNo = empNo;
    }

    public long getEmpNo()
    {
        return this.empNo;
    }
}

@RestController
@RequestMapping(value = "/employee/v1")
public class EmployeeController {

    public ResponseEntity<LocationResponse> getLocationService(HttpServletRequest httpServletRequest,
                @Valid @RequestBody Personal personal, HttpServletResponse httpResponse)
    {
     .... Bussiness Logic
    }

}

2 个答案:

答案 0 :(得分:0)

您应该使用BigInteger代替更大的数字。 Long vs BigInteger 或者,解决方法是在请求对象中将其作为String读取,然后使用服务层中的Long.parseLong(stringValue)将其解析为long,然后将其包装在try / catch块中。 / p>

答案 1 :(得分:0)

如果您不打算使用String,则可以使用BigInteger存储超过long的最大值的值。例如:

public class Personal
{
    private BigInteger empNo;
    public void setEmpNo(BigInteger empNo)
    {
        this.empNo = empNo;
    }

    public BigInteger getEmpNo()
    {
        return this.empNo;
    }
}
示例Expple:

BigInteger bd = new BigInteger("922337203685477582012312321");
System.out.println(bd.multiply(new BigInteger("15")));
System.out.println(bd);

输出

13835058055282163730184684815
922337203685477582012312321

请参阅此链接了解更多信息: https://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html