2012-02-03 3 views
1

저는 회사의 데이터 모델 중 하나 인 Oracle 용 RESTful API를 개발 중이고 JAX-RS (Java6 annotations)로 구현하고 있습니다. 데이터베이스에 대한 멱등 한 MERGE 쿼리를 사용하여 구현 된 PUT 메서드를 성공적으로 완료하면 적절한 HTTP 상태 메서드 (INSERT의 경우 201, UPDATE의 경우 204)를 반환하는 방법에 대한 지침이 필요합니다. .MERGE 문의 적절한 HTTP 상태를 보내려면 어떻게해야합니까?

현재 내 자바 로직이 다음

int affectedRows = customDataBasePackage.executeUpdatePreparedStatement(insertSql, insertParams); 
if(affectedRows < 1) { 
    if(checkRowsSql == null || checkRowsParams == null) { 
    return Response.status(412).build(); 
    } else { 
    return this.executeSELECTreturnJSON(checkRowsSql, checkRowsParams, 412, 409); 
    } 
} else { 
    return Response.status(201).build(); 
} 

executeUpdatePreparedStatement과 유사 방법은 단순히 SQL에 전달 된이 매개 변수를 매핑에서의 PreparedStatement를 가져옵니다 (문자열 [] 객체) 다음 PreparedStatement.executeUpdated을 실행();

또한이 방법으로 PUT 메서드를 구현하는 이유는이 특정 테이블의 id 열이 사용자 생성이므로 INSERT 및 UPDATE 메서드가 모두 멱등환이어야하기 때문입니다. HTTP 표준은 멱등 원 (idempotent) 작업에 PUT을 사용하고 비 멱등 원 작성 (non-idempotent creation)에 대해서는 POST를 사용합니다.

시간을내어 도와 주셔서 감사합니다. 당신은, 당신은 다음 링크를 확인하실 수 있습니다 자세한 내용은 영구적으로 이전 코드 (301)를 사용할 수 있습니다

+0

병합은 동일한 문 (단 하나가 아닌)에 행을 삽입 및 업데이트 할 수 있으므로 오류가없는 경우 200으로 표시됩니다. – tbone

+0

그게 내가 기울여 왔던 것이지만 HTTP 표준을 유지하면서 사용자에게 관련 200,201 또는 204 상태를 다시 보내는 동안 MERGE 문을 사용하는 방법이 있다면 좋을 것입니다. – hypno7oad

답변

관련 문제