gpt4 book ai didi

java - 自定义 Sling POST Servlet 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:46 26 4
gpt4 key购买 nike

我有一个按预期响应 GET 请求的 Servlet。问题是 POST 请求不是由我的 Servlet 处理的,而是由 SlingPostServlet 根据 /system/console/requests 处理的。我的 Servlet 使用 SCR 注释。

@SlingServlet(
methods = {"POST","GET"},
resourceTypes = {"company/components/pages/thepage"},
extensions = { "html" },
selectors = { "edit" },
generateService = true,
generateComponent = true,
name = "com.company.services.osgi.package.EditServlet",
label = "Profile Update Handler"
)

@Properties({
@Property(name = "service.vendor", value = "Our Company"),
@Property(name = "service.description", value = "Update Handler") })

public class EditServlet extends SlingAllMethodsServlet {
...
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response){
// during GET requests this code works!
}

@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response){
// during POST requests this code is not executing
}

我在 http://localhost:4502/system/console/components 中看到我的 servlet 属性已设置并且处于 Activity 状态

component.id = 3463
component.name = com.company.services.osgi.package.EditServlet
sling.servlet.methods = [POST, GET]
sling.servlet.resourceTypes = [company/components/pages/thepage]
sling.servlet.selectors = [edit]
sling.servlet.extensions = [html]

安装包时我没有看到错误。似乎两者都已注册

15.07.2015 13:05:24.017 INFO [OsgiInstallerImpl] org.apache.sling.servlets.resolver.internal.SlingServletResolver Registered ServletResourceProvider: servlet=com.company.services.osgi.package.EditServlet, paths=[/libs/foundation/components/primary/company/components/pages/thepage/edit.html.POST.servlet, /libs/foundation/components/primary/company/components/pages/thepage/edit.html.GET.servlet]

我已经确认该页面具有正确的资源类型(如果没有,我想 doGet 也将无法正常工作)。我在 POST 上做错了什么?知道为什么 doGet 有效但 doPost 无效吗?

更新我能让它工作的唯一方法是为在 resourceTypes = {"sling/servlet/default"} 上运行的 doPost 创建另一个 servlet, 我更新了第一个从方法中删除 POST 的 servlet

@SlingServlet(
methods = {"POST"},
// resourceTypes = {"company/components/pages/thepage"},
resourceTypes = {"sling/servlet/default" },
extensions = { "html" },
selectors = {"post-servlet"} ,
generateService = true,
generateComponent = true,
name = "com.company.services.osgi.people.UpdateServlet",
label = "Update Handler",
metatype=true
)

最佳答案

我们没有看到您的 POST 请求的示例,但我猜您可能正在向页面路径发送 POST,而您的 servlet 注册的资源类型位于子资源 jcr:content 上。

在 cq:Page 资源上带有 html 扩展名的 GET 请求在内部被重定向到 jcr:content 资源的 html 渲染,但是对于 POST 请求没有这样的东西。

关于java - 自定义 Sling POST Servlet 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com