groovy - 如何在 groovy 中排除 servlet-api-2.4
问题描述
我想在我的 groovy 2.4 应用程序中使用 jetty 9(带有 servlet api 3.1)。但是 groovy 2.4 附带了捆绑的 servlet-api-2.4.jar。这会导致错误,例如
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
我尝试通过葡萄获取 javax.servlet-api 版本 3.1.0 但无济于事。显然,groovy 的 servlet-api jar 覆盖了葡萄。
我怎样才能做到这一点?
在请求到达端点时抛出上述错误的完整代码:
@Grab(group="javax.servlet", module="javax.servlet-api", version="3.1.0", force=true)
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.ServletException
@Grab(group="org.eclipse.jetty", module="jetty-servlet", version="9.4.8.v20171121")
import org.eclipse.jetty.servlet.ServletContextHandler
@Grab(group="org.eclipse.jetty", module="jetty-server", version="9.4.8.v20171121")
import org.eclipse.jetty.server.Server
public class WebHookServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
def slurper = new groovy.json.JsonSlurper()
def msg = slurper.parse(req.inputStream)
// Do something with the message
resp.setStatus(HttpServletResponse.SC_NO_CONTENT)
}
}
Server server = new Server(8080)
ServletContextHandler context = new ServletContextHandler(server, "/ws", ServletContextHandler.SESSIONS)
context.addServlet(WebHookServlet.class, "/webhook")
server.start()
server.join()
解决方案
Groovy>2.5 将 servlet api 升级到 3.0.1 https://issues.apache.org/jira/browse/GROOVY-7899
不确定 jetty 9 使用的 3.0.1 和 3.1 之间的区别,但经过几次简短的测试,它似乎工作正常。
推荐阅读
- python - 从网站获取 JSON 数据的不同方法
- vue.js - 登录后 VUA 和 AUTH0 未登陆上一个 URL
- node.js - 如何将 fluent-ffmpeg 屏幕截图的输出作为缓冲区而不是直接写入磁盘?
- android - 访问路径...被拒绝 - Xamarin Android
- python - 在类的实例中查找 max()
- minimalmodbus - 在 minimummodbus 中查找有效的 slaveaddresses 或 slaveaddresses 的数量
- android - 无法解析 com.google.gms:google-services:4.3.3
- javascript - 在 React 中发出自定义事件
- r - 无论顺序,按 3 列分组并在 R 中汇总
- javascript - useContext 跨文件导致循环依赖