2011-12-28 3 views
0

JSON을 통해 클라이언트와 통신 한 Spring MVC 기반 애플리케이션 서버가 있습니다. 클라이언트가 수행 할 수있는 쿼리 중 하나가 "보류중인 메시지가 있습니까?"입니다. 을 사용하면 클라이언트가 인증 개체를 만들어 서버에 게시합니다. 서버는 보류중인 메시지 목록을 보냅니다. for ex. List<PendingMessage>클라이언트에게 예외에 대해 알리기

이제 보류중인 메시지가 아닌 경우 null을 반환합니다. 그러나 질문은, 어떻게 클라이언트에게 알릴 것인가입니다. 예를 들어, DB 연결이 끊어 졌거나 인증이 잘못되었거나 클라이언트와 공유 할 다른 예외가있는 경우에 오류가 발생 했습니까?

답변

0

코드가 던질 수있는 여러 유형의 예외를 잡을 수 있습니다. 이를 기반으로 사용자 정의 메시지 &을 클라이언트에 정의 할 수 있습니다. 클라이언트 쪽에서는 예외에 대해 getMessage()를 수행해야합니다. 이렇게하면 문제가 해결됩니다.

0

예외를 throw하여이를 수행 할 수 있습니다. SpringMVC는 예외를 표준 http 상태 코드 (200, 400, 500 등)에 매핑합니다. Java로 코딩 할 때와 마찬가지로 사용자의 특정 요구에 맞게 사용자 정의 예외를 작성할 수 있습니다.

0

클라이언트와 서버를 모두 설계하고 있다면 재미있는 일종의 프로토콜을 정의하고 싶을 것입니다. 원하는 요청에 대해 정의 된 형식으로 데이터를 반환하는 rpc 서버로 웹 서버를 생각할 수 있습니다.

예를 들어

, HTTP 상태 코드를 사용하여, 성공적인 응답은 다음과 같은 데이터를 반환 할 수 있습니다 :

{ 
    status: 200, 
    message: "OK", 
    data: { 
     name: John Doe, 
     age: 31 
    }, 
    error: null 
} 

오류가 발생 요청 :

{ 
    status: 400, 
    message: "Bad Request", 
    data: null, 
    error: "Database request timed out" 
} 

당신은 꽤 많이있을 것 catch 블록을 시도하여 예상되는 예외를 catch 한 다음 클라이언트가 처리 할 수있는 문제점을 설명하는 적절한 JSON 응답으로 변환 할 수 있습니다.

서블릿에 도달하기 전에 요청에 오류가 단순히 발생하는 경우 요청을 작성하는 데 사용 된 API가 클라이언트의 오류를 알리는 데 사용할 수있는 일종의 onError 콜백을 제공합니다.

+0

좋은 헤더가 있지만 내 서버는 DB에서 가져온 객체를 가져 와서 자동으로 JSON 형식 (저지 + 잭슨)으로 변환하므로 사용자가 제공하는 것을 실제로 수행 할 수 없습니다. – stdcall

+0

그냥 "데이터"속성은 데이터베이스에서 반환 된 json 데이터입니다 귀하의 사용자 정의 json 응답으로 래핑 할 수 ... 그것은 정말 문제가 안된다, 특별히 자바에 대한 많은 JSON 직렬화 API가 있기 때문에 –

+0

나는 보통 org.json을 사용하지만, Jackson JSON 프로세서 라이브러리의 처음 모습에서 볼 때, 이처럼 간단한 것을 허용한다. –

0

HTTP 응답 상태 코드로 시작하십시오. 예를 들어, DB 연결 문제가있는 경우 500 Internal Server Error를 반환합니다.

이 방법으로 클라이언트에게 필요한 모든 정보를 제공하지 못할 수도 있습니다. 따라서 응답 본문에 JSON으로 세부 정보를 제공 할 수도 있습니다. 이 JSON을 원하는대로 구조화하십시오. 응답을받은 후 클라이언트 응용 프로그램이 특정 URL로 이동하게하려면 해당 URL을 응답에 제공하는 것을 고려하십시오.

하나의 마지막 포인트 : 200 OK와 응답 본문의 오류를 결합하는 것은 나쁜 형식입니다. 나는 이것을 전에 보았고, 그것은 성가시다.

관련 문제