찾다

 >  Q&A  >  본문

架构设计 - JAVA端的错误码和错误信息,该设计成全局常量还是枚举值?

Map<String,String> responseInfo = new HashTable<String,String>();
responseInfo.set("FE_PRC_BACK_001","TargetUri is not exist");
//responseInfo.set("FE_XREQ_002","Target Uri of XRequest is Empty.");
//responseInfo.set("FE_REQ_003","The processor flag is incorrect or the BusinessContext time out.");

FE_PRC_BACK_001这样的是错误码,TargetUri is not exist是错误信息,需要以键值对(JSON)的形式响应给浏览器
这时,JAVA端是应该以什么方式来罗列这些错误码和错误信息呢?常量?还是枚举类型?

String FE_PRC_BACK_001 = "TargetUri is not exist";

请教一下各位大神,你们的项目中都是怎么设计的?

黄舟黄舟2770일 전1013

모든 응답(3)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:18:48

    두 가지 해결 방법이 있습니다.
    1. 객체로 캡슐화합니다. 예:

    으아악

    2. 다음과 같이 열거형을 사용하여 구현합니다.

    으아악

    1번과 2번의 구현 아이디어는 사실 비슷하지만(주제가 제시하는 코드 아이디어도 비슷하고, 특정DTO을 사용할지 일반Map을 사용할지의 차이만 있을 뿐입니다), 열거형을 사용할 경우에는 다음과 같은 문제가 있습니다. 다음 몇 가지 참고할 사항:
    열거 결과가 base-api, 버전 1.0.0에 존재하고 각각 프로젝트 A와 B가 있고 프로젝트 A는 프로젝트 B에 종속되며 프로젝트 A와 B는 모두 있다고 가정합니다. base-api에 의존
    1. 프로젝트 B가 base-api를 1.0.1로 업그레이드하고 새 열거가 Result에 추가되고 프로젝트 B의 인터페이스가 새 열거를 반환하지만 프로젝트 A는 그렇지 않은 경우 base-api를 업그레이드할 때 인터페이스가 호출되고 새 열거형이 반환되면 이전 버전의 base-api에 새 열거형이 존재하지 않기 때문에 역직렬화 예외가 보고됩니다.
    2. 기본값은 열거형을 열거형 변수 이름으로 직렬화하는 것입니다. 이를 사용자 정의 형식(예: msg 포함)으로 직렬화하려면 직렬 변환기를 사용자 정의해야 합니다.

    회신하다
    0
  • 阿神

    阿神2017-04-18 09:18:48

    모든 오류 메시지가 확인되면 프로그램에 작성할 수 있습니다. 전역 상수보다 열거형을 사용하는 것이 더 쉽습니다. 오류 코드와 메시지에 해당하는 전역 상수를 갖는 것은 여전히 ​​매우 고통스럽습니다.

    저는 Java의 열거형을 가장 좋아합니다. 주로 Java의 열거형 유형을 확장, 구성 및 재작성할 수 있기 때문입니다toString... Java의 열거형 자체는 객체이고, 열거형 유형 자체는 다소 특별한 클래스이기 때문입니다.

    오류 메시지를 수정할 수 없는 경우 신청 과정에서 추가되어 데이터베이스에 저장될 수 있습니다. 그런 다음 이를 처리하기 위한 특별한 관리 클래스 세트를 작성하고 HashTable 또는 HashMap을 사용하여 이를 구현해야 합니다. 하지만 내 생각엔 당신의 문제는 그렇게 복잡하지 않은 것 같아요.

    회신하다
    0
  • PHPz

    PHPz2017-04-18 09:18:48

    Java 열거에 잘못된 키를 넣은 다음 속성 파일 등 외부 파일에 잘못된 키와 잘못된 정보 간의 매핑을 넣습니다. 런타임에는 오류 열거 키를 기반으로 파일에서 오류 텍스트를 실시간으로 검색하면 됩니다. 오류가 자주 발생하지 않기 때문에 실시간으로 오류 정보를 읽는 데 문제가 없을 것입니다. 프로그램이 시작됩니다. 성능을 향상시키기 위해 정보를 읽고 캐시합니다.

    회신하다
    0
  • 취소회신하다