gpt4 book ai didi

java - Jersey HTTP 服务器 : Add parameters to every http method

转载 作者:行者123 更新时间:2023-12-02 10:29:43 25 4
gpt4 key购买 nike

我有一个 Jersey Http Server,想要优化我的代码。我遇到的一个问题是,每种方法都有几乎相同的手动事务处理。这就是典型的方法:

@POST
@Path("/create")
public Response create(String taskJson) {

Connection connection = null;
try (MySqlConnection mySqlConnection = new MySqlConnection()) {
connection = mySqlConnection.getDbConnection();
connection.setAutoCommit(false);

// Add some data to the database with SQL-Statements...

connection.commit();
return result;

} catch (Exception e) {
connection.rollback();
Logger.getInstance().logError(LOG_TAG, "Unexpected Error", e);
return error;
}

}

因此数据库事务处理非常烦人,并且每个方法中都有重复的代码。我想让我的方法看起来像这样:

@POST
@Path("/create")
public Response create(String taskJson, @AddedPerJerseyMagicToMyMethod Connection connection) {

// Add some data to the database with SQL-Statements...

return result;

}

所以我希望过滤器向每个方法添加一个连接参数,并且过滤器自动处理事务内容(例如提交、异常回滚等)

我现在已经知道如何向我的 Jersey Http Server 添加过滤器,并且还知道由谁来处理未捕获的异常。但我不知道如何向每个方法添加自定义参数并在异常处理程序中访问这些参数。

最佳答案

通过向 JAX-RS 资源添加参数来解决这个问题并不是一个好主意,因为这与之无关。

在 JAX-RS 资源方法中,您应该只读取并验证请求参数,然后将请求的任务交给执行数据库操作的不同类。

此外,如果这不仅仅是一项练习,您可能应该使用数据库连接池,而不是为每个调用创建一个新连接。 (但不要自己实现池化。)

添加一点实用提示:您可以让资源类使用上下文注释的方法扩展基类,然后该方法将在实际请求的资源方法之前调用强>:

public class BaseResource {

protected Object someVar;

@Context
public void setServletContext( ServletContext servletContext ) {
someVar = ...;
}
}

这样,您的每个资源方法都会设置 someVar

如前所述,我不会将其用于像数据库事务这样复杂的事情。

关于java - Jersey HTTP 服务器 : Add parameters to every http method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53683312/

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