node-web-mvc
Version:
node spring mvc
78 lines (77 loc) • 3.77 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const HttpHeaders_1 = __importDefault(require("../../http/HttpHeaders"));
const HttpMethod_1 = __importDefault(require("../../http/HttpMethod"));
const HttpRequestValidation_1 = __importDefault(require("../../http/HttpRequestValidation"));
const HttpStatus_1 = __importDefault(require("../../http/HttpStatus"));
const HttpEntity_1 = __importDefault(require("../../models/HttpEntity"));
const RequestEntity_1 = __importDefault(require("../../models/RequestEntity"));
const ResponseEntity_1 = __importDefault(require("../../models/ResponseEntity"));
const AbstractMessageConverterMethodProcessor_1 = __importDefault(require("./AbstractMessageConverterMethodProcessor"));
class HttpEntityMethodProcessor extends AbstractMessageConverterMethodProcessor_1.default {
constructor(messageConverters, contentNegotiationManager) {
super(messageConverters, contentNegotiationManager);
}
supportsReturnType(returnType) {
return returnType.isParamAssignableOf(ResponseEntity_1.default);
}
handleReturnValue(entity, returnType, servletContext) {
const response = servletContext.response;
const headers = entity.headers;
const responseStatus = entity.responseStatus;
// 合并Http返回头
Object.keys(entity.headers).forEach((key) => {
if (key.toLowerCase() === 'vary') {
response.addHeader(key, headers[key]);
}
else {
response.setHeader(key, entity.headers[key]);
}
});
// 设置返回头
response.setStatus(responseStatus);
if (HttpStatus_1.default.OK.equals(responseStatus) && this.isResourceNotModified(servletContext)) {
return;
}
else if (HttpStatus_1.default.OK.code / 100 == 3) {
// 重定向处理
}
return this.writeWithMessageConverters(entity.body, servletContext);
}
isResourceNotModified(servletContext) {
var _a;
const { request, response } = servletContext;
const method = request.method;
if (method != HttpMethod_1.default.GET && method != HttpMethod_1.default.HEAD) {
return false;
}
const etag = (_a = response.getHeaderValue(HttpHeaders_1.default.ETAG)) === null || _a === void 0 ? void 0 : _a[0];
const lastModified = response.getLastModifiedTime().getTime();
const validation = new HttpRequestValidation_1.default(request, response);
response.removeHeader(HttpHeaders_1.default.LAST_MODIFIED);
response.removeHeader(HttpHeaders_1.default.ETAG);
return validation.checkNotModified(String(etag), lastModified);
}
supportsParameter(parameter, servletContext) {
return parameter.isParamAssignableOf(RequestEntity_1.default) || parameter.parameterType === HttpEntity_1.default;
}
resolveArgument(parameter, servletContext) {
const request = servletContext.request;
if (parameter.parameterType === HttpEntity_1.default) {
return new HttpEntity_1.default(null, request.headers);
}
const runtimeType = parameter.getParameterGenericTypeOf(1);
const type = runtimeType || Object;
let data = null;
if (request.hasBody) {
data = this.readWithMessageConverters(servletContext, type);
}
const url = request.requestUrl;
const method = request.method;
return new RequestEntity_1.default(url, method, data, request.headers);
}
}
exports.default = HttpEntityMethodProcessor;