我正在开发一个应用程序的API,它能够根据解决方案ID(这是一个整数)找到所谓的ProductSolutions。
代码如下所示:
@Repository
public interface ProductSolutionRepository extends CrudRepository<ProductSolution, String> {
public List<ProductSolution> findBySolutionId(@Param("solutionId") int solutionId);
}
当使用字符串而不是整数(localhost:8080/api/v1/productSolutions/search/findBySolutionId?solutionId=dangerousscript
)发送请求时,API会返回错误,并显示以下消息:
无法从类型[java.lang.String]转换为type [@ org.springframework.data.repository.query.Param int]表示值 'dangerousscript';嵌套异常是 java.lang.NumberFormatException:对于输入字符串: \ “dangerousscript \”“`
虽然看起来Chrome和Firefox整齐地逃避输入(并且不执行任何脚本),但人们仍然担心我们的API可能会用于跨站点脚本攻击。
解决此问题的一种简单方法是删除用户在抛出异常时提供的输入,或者创建我们自己的错误页面。我可以用什么方式配置spring boot来抛出自定义异常?
答案 0 :(得分:2)
您可以在使用@ExceptionHandler
注释的班级中定义@ControllerAdvice
的方法。
您可以使用@ResponseBody
注释此方法(如果您没有使用@RestController
)并直接返回所需的响应或使用正确的消息重新抛出异常。
@ControllerAdvice
public class RestExceptionControllerAdvice {
@ExceptionHandler(NumberFormatException.class)
public ErrorResponse handleSearchParseException(NumberFormatException exception) {
// do whathever you want
}
}