我正在开发一个REST服务.它使用JSON,并且在出现问题时必须返回一些预定义的JSON对象.默认的Spring响应如下所示:
{
"timestamp": 1512578593776,
"status": 403,
"error": "Forbidden",
"message": "Access Denied",
"path": "/swagger-ui.html"
}
Run Code Online (Sandbox Code Playgroud)
我想用自己的JSON替换这个默认的JSON(带有栈跟踪和其他异常相关信息).
Spring提供了一种覆盖默认行为的便捷方法.应该定义一个@RestControllerAdvice
带有自定义异常处理程序的bean.像这样
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {Exception.class})
public ResponseEntity<ExceptionResponse> unknownException(Exception ex) {
ExceptionResponse resp = new ExceptionResponse(ex, level); // my custom response object
return new ResponseEntity<ExceptionResponse>(resp, resp.getStatus());
}
@ExceptionHandler(value = {AuthenticationException.class})
public ResponseEntity<ExceptionResponse> authenticationException(AuthenticationExceptionex) {
// WON'T WORK
}
}
Run Code Online (Sandbox Code Playgroud)
ExceptionResponse
然后,Spring将使用特殊的消息转换器将自定义对象转换为JSON.
问题是,安全例外InsufficientAuthenticationException
不能被注释为的方法拦截@ExceptionHandler
.这种异常发生在输入Spring MVC调度程序servlet并初始化所有MVC处理程序之前.
可以使用自定义筛选器拦截此异常,并从头开始构建自己的JSON序列化.在这种情况下,可以获得一个完全独立于Spring MVC基础结构的其余部分的代码.这不好.
我找到的解决方案似乎有效,但看起来很疯狂.
@Configuration
public class CustomSecurityConfiguration extends
WebSecurityConfigurerAdapter {
@Autowired
protected …
Run Code Online (Sandbox Code Playgroud) PHP Class DateInterval
有一个属性"days".根据手册,它返回"间隔跨越的总天数.如果这是未知的,则天数将为假."
在我的情况下代码:
$d = new DateInterval('P1Y');
echo $d->days;
Run Code Online (Sandbox Code Playgroud)
回报 -99999
和这样的代码
$a = DateTime::createFromFormat("d.m.Y", "01.01.2010");
$b = DateTime::createFromFormat("d.m.Y", "03.01.2010");
$d = $b->diff($a);
echo $d->days;
Run Code Online (Sandbox Code Playgroud)
回报 6015
我误解了什么吗?
TransferManager
几个星期以来我一直在争论一个问题,我希望得到一些反馈,
我有一个服务器应用程序,等待发送给它的任务.其中一些任务需要上传到S3.该任务包含我需要的所有上传信息,包括访问密钥.
在我的实际上传的代码,我需要创建一个新的S3Client
和TransferManager
对象每次我需要做的上传,因为我不知道提前我的访问密钥的时间.
在系统处理大约1200个上载后,我收到一个错误,指示JVM无法获得更多本机线程.我将一个分析器附加到应用程序,并注意到该TransferManager
对象没有得到正确清理,有成千上万的"s3-transfer-manager-worker-1"线程处于空闲状态.
我试图TransferManager.shutdownNow()
在上传完成后添加一个电话.这确实清理了线程.但是,RejectedExecutionException
无论何时TransferManager
创建新内容并尝试上传,我都会收到.
TransferManager
包含一个UploadMonitor
并UploadMonitor
具有静态ScheduledExecutorService
. TransferManager.shutdownNow()
调用UploadMonitor.shutdownNow()
调用shutdownNow()
执行程序服务的静态方法.这使得我不能再使用任何TransferManager
对象,即使我尝试创建一个新对象.
如何在不耗尽线程的情况下使用多个传输对象?这似乎是一个错误.
有谁知道,“可选的特定异常”究竟是什么意思?
https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html
有些 JVM 会抛出它,有些则不会?如果他们不这样做,向他们抛出一个通用的 IOException 或根本没有异常?它有关于不同实现的统计数据,它到底有多“可选”?
如果实体类及其超类都实现了带注释的方法,会发生javax.persistence.PostLoad
什么?必须调用哪种方法,哪种方法最先?它是否依赖于方法的可见性(私有,公共)?
(Hibernate默认会话根本不调用这些方法,我将使用Hibernate实现一个变通方法PostLoadEventListener
.)
是否有可能在不创建副本的情况下迭代对动态内容进行排序的集合?
更新:要排序的集合是只读列表.
编程Gatling性能测试我需要检查,如果从服务器返回的HTML包含预定义的字符串.它确实如此,错误地打破了测试.
我没有发现如何做到这一点.必须是这样的:
val scn = scenario("CheckAccess")
.exec(http("request_0")
.get("/")
.headers(headers_0)
.check(css("h1").contains("Access denied")).breakOnFailure()
)
Run Code Online (Sandbox Code Playgroud)
我打电话给希望的功能"包含"和"breakOnFailure".加特林有类似的东西吗?
java ×4
amazon-s3 ×1
collections ×1
comparator ×1
datetime ×1
gatling ×1
hibernate ×1
java-ee ×1
jpa ×1
json ×1
jvm ×1
memory ×1
nio ×1
php ×1
php-5.3 ×1
scala ×1
spring ×1
spring-boot ×1
spring-mvc ×1
superclass ×1