node-web-mvc
Version:
node spring mvc
46 lines (45 loc) • 1.87 kB
JavaScript
;
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;