我有两个REST API的GET POST
当方法中抛出任何异常时,异常处理程序工作正常。但如果我使用格式错误的REST api uri,那么它只显示400错误请求,而不会转到异常处理程序。
Eg.
如果我http://localhost:8080/mypojoInteger/abc,它无法将字符串解析为整数,因此我希望它转到ExceptionHandler。它不会转到异常处理程序,相反,我只看到400个错误请求。
它工作正常,并在GET/POST方法中抛出任何异常时转到异常处理程序。
例如:如果我在path变量中使用123,它工作正常并转到异常处理程序http://localhost:8085/mypojoInteger/123
并将getData方法更改为
@GetMapping("/mypojoInteger/{sentNumber}")
public void getData(@PathVariable("sentNumber") Integer sentNumber) {
throw new NumberFormatException("Exception");
}
注意:POST请求也存在同样的问题。
@GetMapping("/mypojoInteger/{sentNumber}")
public void getData(@PathVariable("sentNumber") Integer sentNumber) {
//some code
}
public void postData(@RequestBody MyPojo myPojo) {
//some code
}
控制器建议类:
@ControllerAdvice
public class CustomGlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(NumberFormatException.class)
protected ResponseEntity<Object> handleEntityNotFound(
NumberFormatException ex) {
// some logic
}
}
当它未能将字符串绑定到REST API uri本身中的整数时,我如何处理异常??
编辑:我的要求是我应该处理整数的溢出值,即,如果传递超过整数的最大值,它必须处理它,而不是抛出NumberFormatException堆栈跟踪。
当我通过流量值时
POJO:
public class MyPojo extends Exception {
private String name;
private Integer myInt;
//getters/setter
}
{
"name":"name",
"myInt":12378977977987879
}
没有@ControllerAdvice,它只显示NumberFormatException堆栈跟踪。对于@ControllerAdvice,它只显示400个错误请求,没有响应实体。在这种情况下,我不希望出现默认的stacktrace/400错误请求,但我希望显示我的自定义消息。
解决方案:
我发现我需要处理错误的请求。所以,我有覆盖
@Override
protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
//Handle Bad Request
}
问题是因为对象未作为有效的请求参数发送,请求示例:5如果发送字符串,将直接引发异常。如果要检查它是字符串还是整数,可以通过以下方式更改代码:
@GetMapping("/mypojoInteger/{sentNumber}")
public void getData(@PathVariable("sentNumber") Object sentNumber) {
if (!(data instanceof Integer)) {
throw new NumberFormatException("Exception");
}
}
这应该适用于您的示例。
我看到的原因是,因为您的请求本身格式不正确-
问题内容: 我正在尝试将套接字绑定到以下端口: 但是它给出: 为什么会发生此错误? 问题答案: 该错误通常表示您尝试打开的端口已被另一个应用程序使用。尝试使用netstat查看哪些端口已打开,然后使用可用端口。 还检查您是否绑定到正确的IP地址(我假设它是本地主机)
我正在尝试将套接字绑定到以下端口: 但它给出: 为什么会出现这个错误呢?
我的Spring Boot服务将执行一项工作,并在成功后退出0(没有restcontroller),但我也希望它在每个异常时退出,因此我在类上添加了并放置了以下方法: 一切正常,但当我抛出一个IllegalArgumentException时,方法不会被调用。首先,我有一个没有参数的void方法,然后我开始尝试使用字符串返回和至少一个参数--这是不需要的。 这怎么行?有没有更好的方法让我的案例对每
我在下面的代码中创建了一个表: 此外,我有记录从csv文件导入到表。我想插入一个新的记录到表我一直得到这个错误 错误:重复的键值违反了唯一约束"salesorderdetail_pkey"DETAIL: Key(SalesorderDetid)=(2)已经存在。********** 错误 ********** 错误:重复的键值违反唯一约束“salesorderdetail_pkey”SQL状态:2
我对spring JPA、Hibernate、MySQL有一个问题。我有一个实体(nom.java)和存储库(公共接口NomRepository扩展了JpaRepository)。它们被创造和注入都很好。 问题是,当我试图通过Repository的save方法保存一个记录时,spring抱怨说“表''不存在”。事实上,我在MySQL中看不到这个表。您尝试了不同值的hibernate.hbm2ddl
[编辑] 我在没有添加行的情况下出现了这个错误: 在添加kapt“com.android.databinding:compiler:$android_plugin_version”之后: