我有一个配置类,它扩展了WebMvcConfigurationSupport
,我添加了这样的拦截器:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor()).addPathPatterns("/api/**");
}
Run Code Online (Sandbox Code Playgroud)
在哪里myInterceptor()
:
@Bean
public MyInterceptor myInterceptor() {
return new MyInterceptor();
}
Run Code Online (Sandbox Code Playgroud)
它适用于/api/**
我已经实现的任何mapping()/api/sample
- 来自MyInterceptor的preHandle被触发(我有一个带映射的Controller /api/sample
).
当我调用不存在的资源时,例如/api/forward/sample
从未调用MyInterceptor的preHandle.
请注意,当我在xml中使用配置时,它按预期工作,如:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/api/**" />
<bean class="my.pack.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)
出于某些原因,对于Java配置,不会拦截对不存在的映射的请求.为什么配置不相同?我认为应该是.
编辑:
多一点调试信息.使用xml配置DispatcherServlet#handlerMappings
包含5个处理程序:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
org.springframework.web.socket.server.support.WebSocketHandlerMapping
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.security.oauth2.provider.endpoint.FrameworkEndpointHandlerMapping
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
Run Code Online (Sandbox Code Playgroud)
使用Java配置它包含7个处理程序:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
org.springframework.web.socket.server.support.WebSocketHandlerMapping
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.security.oauth2.provider.endpoint.FrameworkEndpointHandlerMapping
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport$EmptyHandlerMapping
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
Run Code Online (Sandbox Code Playgroud)
问题似乎是SimpleUrlHandlerMapping
(至少它似乎用于我调用的资源 - api/forward/sample
而api/sample
RequestMappingHandlerMapping
在使用中)在基于Java的配置的情况下具有空的adopIterceptors.
编辑2:
示例应用程序的完整源代码(我试图尽量缩小以演示效果):https: //github.com/szprutamich/spring-demo
在类中ConfigurationBase
- …
我正在使用 Stripe 实现 Subscription*(已准备好 SCA)。我尝试处理https://stripe.com/docs/billing/subscriptions/payment#handling-action-required。在 Stripe 端创建订阅后,我得到了上面文档中的答案:
{
"id": "sub_XXXXXXXXXXXXXXXXXXX",
"object": "subscription",
"status": "incomplete",
...
"latest_invoice": {
...
"payment_intent": {
"status": "requires_action",
...
"next_action": {
"type": "use_stripe_sdk",
...
},
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据文档https://stripe.com/docs/api/payment_intents/object#payment_intent_object-next_action-type
next_action.type
可以有两个值redirect_to_url
和use_stripe_sdk
所以我的问题是如何获取next_action.type = redirect_to_url
(而不是use_stripe_sdk
)以及如何强制填充条纹next_action.redirect_to_url
(因为我想在我的 UI 中自己处理它)?
* SO 上已经有一个类似的问题:https : //stackoverflow.com/questions/56490033/how-to-handle-use-stripe-sdk-through-php 但我的情况是创建我没有的订阅控制 PaymentIntent
迁移到 Hibernate 6 后,ParameterExpression
与Collection
类型一起使用会导致NoSuchElementException
. 似乎Iterator
每个参数都创建了一个,并且某些东西尝试多次遍历它。它可以在 Hibernate 的早期版本中运行。以一个非常虚拟的查询为例:
public List<Long> example(Long userId) {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<User> user = query.from(User.class);
query.select(user.get(User_.id));
ParameterExpression<Collection<Long>> userIdParam = builder.parameter(generify(Collection.class));
query.where(
builder.or(
user.get(User_.id).in(userIdParam),
user.get(User_.id).in(userIdParam)
)
);
query.distinct(true);
TypedQuery<Long> typedQuery = entityManager.createQuery(query);
typedQuery.setParameter(userIdParam, Collections.singletonList(userId));
return typedQuery.getResultList();
}
Run Code Online (Sandbox Code Playgroud)
为每个条件创建 N 个相同的参数表达式有点麻烦。有什么建议吗?
堆栈跟踪:
java.util.NoSuchElementException: null
at java.util.Collections$1.next(Collections.java:4817) ~[?:?]
at org.hibernate.query.sqm.internal.SqmUtil.createJdbcParameterBindings(SqmUtil.java:267) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.buildCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:358) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:268) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:244) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:518) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final]
at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:367) ~[hibernate-core-6.2.5.Final.jar:6.2.5.Final] …
Run Code Online (Sandbox Code Playgroud) 我想用指定的时间长按指定的点.不幸的是,没有像在课堂上长按一样的方法:UiDevice 我可能会编写自己的方法,如下所示:
private void longClick(int x, int y, long time) {
android.graphics.Point point = new android.graphics.Point(x, y);
android.graphics.Point[] points = new android.graphics.Point[2];
points[0] = point;
points[1] = point;
getUiDevice().swipe(points, time / 5); // according to documentation, each step lasts 5ms
}
Run Code Online (Sandbox Code Playgroud)
或使用反射并调用longTap:
private void longClick(int x, int y) {
Field mUiAutomationBridgeField = getUiDevice().getClass().getDeclaredField("mUiAutomationBridge");
mUiAutomationBridgeField.setAccessible(true);
Object mUiAutomationBridge = mUiAutomationBridgeField.get(getUiDevice());
Field mInteractionControllerField = mUiAutomationBridge.getClass().getDeclaredField("mInteractionController");
mInteractionControllerField.setAccessible(true);
Object mInteractionController = mInteractionControllerField.get(mUiAutomationBridge);
Method longTap = mInteractionController.getClass().getDeclaredMethod("longTap", int.class, int.class);
longTap.setAccessible(true);
longTap.invoke(mInteractionController, x, y);
}
Run Code Online (Sandbox Code Playgroud)
然而,它不是满意的解决方案,任何想法如何做得更好的方式?他们为什么错过这种方法?
我在和jx,kubernetes和helm斗争。我在执行env目录中的命令的jx上运行Jenkinsfile:
sh 'jx step helm build'
sh 'jx step helm apply'
Run Code Online (Sandbox Code Playgroud)
它成功完成并部署了pods /创建了部署等。但是,头盔列表为空。
当我执行类似helm install ...
或的操作时,helm upgrade --install ...
它会创建一个发布,并且头盔列表显示了这一点。
这是正确的行为吗?
更多细节:
安装了以下软件的EKS:
eksctl create cluster --region eu-west-2 --name integration --version 1.12 \
--nodegroup-name integration-nodes \
--node-type t3.large \
--nodes 3 \
--nodes-min 1 \
--nodes-max 10 \
--node-ami auto \
--full-ecr-access \
--vpc-cidr "172.20.0.0/16"
Run Code Online (Sandbox Code Playgroud)
然后我用一些kubectly apply
命令(不共享文件)设置入口(外部和内部)。然后设置路由和与vpc相关的内容。
JX安装了:
jx install --provider=eks --ingress-namespace='internal-ingress-nginx' \
--ingress-class='internal-nginx' \
--ingress-deployment='nginx-internal-ingress-controller' \
--ingress-service='internal-ingress-nginx' --on-premise \
--external-ip='#########' \
--git-api-token=######### \
--git-username=######### …
Run Code Online (Sandbox Code Playgroud) 我有maven运行配置,我打电话给:
liquibase:rollback -Dliquibase.rollbackCount=1 -Dliquibase.clearCheckSums=true
Run Code Online (Sandbox Code Playgroud)
在运行配置本身而不是编辑配置之前,有没有办法显示一些弹出窗口来提供rollbackCount?
好的,这是一个愚蠢的....
Select * from <table> where <col1> is null and <col2> = 1;
Run Code Online (Sandbox Code Playgroud)
<col1>
是varchar2(5byte)没有defalut值
<col2>
是默认值-1
为什么我的上述查询不会返回任何记录?我知道查询应该返回一个结果集,但我什么都没得到.
如果我做:
Select * from <table> where <col1> is null;
Run Code Online (Sandbox Code Playgroud)
我收到了127531条记录
如果我做:
Select * from <table> where <col2> = 1;
Run Code Online (Sandbox Code Playgroud)
我收到了86342条记录
Oracle是否以奇怪的方式处理空值?我是MSSQL有点人.