UNPKG

node-web-mvc

Version:
46 lines (45 loc) 1.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ModelAttribute_1 = __importDefault(require("../../annotations/ModelAttribute")); const ApiUtils_1 = require("../../util/ApiUtils"); class ModelAttributeMethodProcessor { constructor(isAnnotationRequired = true) { this.isAnnotationRequired = true; this.isAnnotationRequired = isAnnotationRequired; } getNameForReturnValue(returnType) { const anno = returnType.getParameterAnnotation(ModelAttribute_1.default); if (anno) { return anno.value; } return (0, ApiUtils_1.getVariableName)(returnType.parameterType); } supportsParameter(parameter) { if (this.isAnnotationRequired) { return parameter.hasParameterAnnotation(ModelAttribute_1.default); } return !(0, ApiUtils_1.isSimpleValueType)(parameter.parameterType); } resolveArgument(parameter, servletContext) { // 这里不实现WebDataBinder直接从query中提取 const name = this.getNameForReturnValue(parameter); const query = servletContext.request.query; return query[name]; } supportsReturnType(returnType) { if (this.isAnnotationRequired) { return returnType.hasParameterAnnotation(ModelAttribute_1.default); } return !(0, ApiUtils_1.isSimpleValueType)(returnType.parameterType); } async handleReturnValue(returnValue, returnType, servletContext, mavContainer) { if (returnValue) { const name = this.getNameForReturnValue(returnType); mavContainer.addAttribute(name, returnValue); } } } exports.default = ModelAttributeMethodProcessor;