import org.onap.policy.common.utils.coder.StandardCoder;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
-import org.springframework.http.HttpHeaders;\r
import org.springframework.http.ResponseEntity;\r
import org.springframework.web.bind.annotation.ExceptionHandler;\r
+import org.springframework.web.context.request.WebRequest;\r
\r
/**\r
* Super class from which REST controllers are derived.\r
protected static final String VERSION_LATEST_NAME = "X-LatestVersion";\r
protected static final String VERSION_LATEST_DESCRIPTION = "Used only to communicate an API's latest version";\r
\r
- protected static final String REQUEST_ID_NAME = "X-ONAP-RequestID";\r
+ public static final String REQUEST_ID_NAME = "X-ONAP-RequestID";\r
protected static final String REQUEST_ID_HDR_DESCRIPTION = "Used to track REST transactions for logging purpose";\r
protected static final String REQUEST_ID_PARAM_DESCRIPTION = "RequestID for http transaction";\r
\r
protected final Coder coder = new StandardCoder();\r
\r
protected <T> ResponseEntity<T> makeOkResponse(UUID requestId, T respEntity) {\r
- HttpHeaders headers = new HttpHeaders();\r
- addVersionControlHeaders(headers);\r
- addLoggingHeaders(headers, requestId);\r
- return ResponseEntity.ok().headers(headers).body(respEntity);\r
+ return CommonRestController.addLoggingHeaders(addVersionControlHeaders(ResponseEntity.ok()), requestId)\r
+ .body(respEntity);\r
}\r
\r
- protected <T> ResponseEntity<T> makeErrorResponse(UUID requestId, T respEntity, int status) {\r
- HttpHeaders headers = new HttpHeaders();\r
- addVersionControlHeaders(headers);\r
- addLoggingHeaders(headers, requestId);\r
- return ResponseEntity.status(status).headers(headers).body(respEntity);\r
- }\r
-\r
- private void addVersionControlHeaders(HttpHeaders headers) {\r
- headers.add("X-MinorVersion", "0");\r
- headers.add("X-PatchVersion", "0");\r
- headers.add("X-LatestVersion", "1.0.0");\r
+ /**\r
+ * Adds version headers to the response.\r
+ *\r
+ * @param respBuilder response builder\r
+ * @return the response builder, with version headers\r
+ */\r
+ public static ResponseEntity.BodyBuilder addVersionControlHeaders(ResponseEntity.BodyBuilder respBuilder) {\r
+ return respBuilder.header(VERSION_MINOR_NAME, "0").header(VERSION_PATCH_NAME, "0").header(VERSION_LATEST_NAME,\r
+ API_VERSION);\r
}\r
\r
- private void addLoggingHeaders(HttpHeaders headers, UUID requestId) {\r
+ /**\r
+ * Adds logging headers to the response.\r
+ *\r
+ * @param respBuilder response builder\r
+ * @return the response builder, with version logging\r
+ */\r
+ public static ResponseEntity.BodyBuilder addLoggingHeaders(ResponseEntity.BodyBuilder respBuilder, UUID requestId) {\r
if (requestId == null) {\r
// Generate a random uuid if client does not embed requestId in rest request\r
- headers.add("X-ONAP-RequestID", UUID.randomUUID().toString());\r
- } else {\r
- headers.add("X-ONAP-RequestID", requestId.toString());\r
+ return respBuilder.header(REQUEST_ID_NAME, UUID.randomUUID().toString());\r
}\r
+\r
+ return respBuilder.header(REQUEST_ID_NAME, requestId.toString());\r
}\r
\r
/**\r
}\r
\r
@ExceptionHandler(value = {PolicyApiRuntimeException.class})\r
- protected ResponseEntity<Object> handleException(PolicyApiRuntimeException ex) {\r
+ protected ResponseEntity<Object> handleException(PolicyApiRuntimeException ex, WebRequest req) {\r
LOGGER.warn(ex.getMessage(), ex.getCause());\r
- return makeErrorResponse(ex.getRequestId(), ex.getErrorResponse(),\r
- ex.getErrorResponse().getResponseCode().getStatusCode());\r
+ final var requestId = req.getHeader(CommonRestController.REQUEST_ID_NAME);\r
+ final var status = ex.getErrorResponse().getResponseCode().getStatusCode();\r
+ return CommonRestController.addLoggingHeaders(\r
+ CommonRestController.addVersionControlHeaders(ResponseEntity.status(status)),\r
+ requestId != null ? UUID.fromString(requestId) : ex.getRequestId()).body(ex.getErrorResponse());\r
}\r
}
\ No newline at end of file