【发布时间】:2020-07-30 02:45:38
【问题描述】:
我有一个 Java 服务器。如果我故意在 sql 查询中拼错一个单词,使其无效,则此函数会引发相应的错误。为什么这不会将详细的错误消息传递回客户端?相反,错误信息的范围只包括
“请求失败,状态码 500”
这是实际的详细错误:
错误:关系“联系人”不存在
这里是终点……
@POST
@Path("{from_list_id}/{to_list_id}")
public Message merge(@PathParam("from_list_id") int from_list_id, @PathParam("to_list_id") int to_list_id) {
String sql = "select * from lists where list_id=?";
sql = "insert into contacts (data, imported, list_id) select data, imported," + to_list_id
+ " from contacs where list_id = " + from_list_id;
int rowsAffected = db.sql(sql).execute().getRowsAffected();
return Message.success(
"Successfully merged " + rowsAffected + " contacts");
}
我看到 dropwizard 在我的日志文件中捕获了确切的错误,但该错误没有发送到客户端。我们的客户端是一个使用 axios 的 Vuejs 组件。
这里是客户端 axios 调用
this.$axios
.post("/merge/" + this.from_list_id + "/" + this.to_list_id, {
timeout: 0
})
.then(
response => {
this.list = response;
util.showSuccess(response.data.message);
},
error => {
console.log(JSON.stringify(error));
util.showError(error);
}
);
【问题讨论】:
-
您可以使用任何 DTO 来传播消息。
Drawback:- additional complexity -
因为 HTTP 状态 500 专门设计用于隐藏来自客户端的信息,以免将攻击向量泄露给攻击者。
标签: java vue.js error-handling axios