Java 设计问题-如何将错误从服务器传播到客户端

Java 设计问题-如何将错误从服务器传播到客户端,java,validation,error-handling,architecture,Java,Validation,Error Handling,Architecture,我有一个设计问题 我应该如何将错误从java服务器(通过RESTAPI、JSON访问)传播到客户端 现在我抛出异常。异常包含错误标记和变量。异常被序列化,http返回代码对于业务和验证错误设置为422,对于技术或意外错误设置为500 序列化异常不包含文本,仅包含标记(=异常类型)和变量(=详细信息,例如客户编号)。因此,客户端必须将异常转换为用户可读的格式 一位朋友说,这是一种愚蠢的行为,他希望服务器以完整的错误消息和不同的语言回答。在我看来,我开始在服务器中实现表示层关注点。。。他认为许多客户

我有一个设计问题

我应该如何将错误从java服务器(通过RESTAPI、JSON访问)传播到客户端

现在我抛出异常。异常包含错误标记和变量。异常被序列化,http返回代码对于业务和验证错误设置为422,对于技术或意外错误设置为500

序列化异常不包含文本,仅包含标记(=异常类型)和变量(=详细信息,例如客户编号)。因此,客户端必须将异常转换为用户可读的格式

一位朋友说,这是一种愚蠢的行为,他希望服务器以完整的错误消息和不同的语言回答。在我看来,我开始在服务器中实现表示层关注点。。。他认为许多客户必须实现翻译(冗余源)。。。在本例中,我将提供一个默认库来进行翻译,或者至少提供一个每个客户端都可以使用的翻译属性文件

关于验证的另一个信息:验证被封装在一个lib(=jar)中,服务器和客户机使用该lib(=jar)(因此,如果客户机希望通过本地验证检查加快验证速度,则服务器不信任客户机,并且不复制任何源)


关于这个设计问题有什么明智的意见吗?非常感谢。

您可以使用列表错误为一个成员的复合对象。接收时:if(!response.getErrors().isEmpty()){}…我认为这是基于观点的。在我的公司里,我们发送了一条粗略的错误消息和响应中的代码,完整的错误堆栈跟踪被保存到日志文件中。但这取决于API的消费者是谁。对于内部API,最好有更多的信息,但在另一方面,您的同事也可以访问日志。你肯定不想在非技术用户身上散布你的完整追踪。我已经这么做了。。。validationexception包含ValidationError的列表。我的问题是关于语言翻译。IMHO API是否呈现本地化错误取决于正常输出是否本地化。代码和错误关键字应全部为英语。目前服务器中没有本地化内容。技术和意外(运行时)异常会完全写入日志,而业务异常不会。stacktrace永远不会发送到客户端(关于服务器内部的信息太多)。代码和错误关键字是英文的。您可以使用列表错误为一个成员的复合对象。接收时:if(!response.getErrors().isEmpty()){}…我认为这是基于观点的。在我的公司里,我们发送了一条粗略的错误消息和响应中的代码,完整的错误堆栈跟踪被保存到日志文件中。但这取决于API的消费者是谁。对于内部API,最好有更多的信息,但在另一方面,您的同事也可以访问日志。你肯定不想在非技术用户身上散布你的完整追踪。我已经这么做了。。。validationexception包含ValidationError的列表。我的问题是关于语言翻译。IMHO API是否呈现本地化错误取决于正常输出是否本地化。代码和错误关键字应全部为英语。目前服务器中没有本地化内容。技术和意外(运行时)异常会完全写入日志,而业务异常不会。stacktrace永远不会发送到客户端(关于服务器内部的信息太多)。代码和错误关键字是英文的。