All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.blade.mvc.view.resolve.RouteViewResolve Maven / Gradle / Ivy

There is a newer version: 1.7.2-beta
Show newest version
/**
 * Copyright (c) 2016, biezhi 王爵 ([email protected])
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.blade.mvc.view.resolve; import com.blade.exception.BladeException; import com.blade.ioc.Ioc; import com.blade.kit.reflect.ReflectKit; import com.blade.mvc.annotation.JSON; import com.blade.mvc.annotation.RestController; import com.blade.mvc.http.Request; import com.blade.mvc.http.Response; import com.blade.mvc.route.Route; import com.blade.mvc.view.ModelAndView; import com.blade.mvc.view.ViewSettings; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class RouteViewResolve { private Ioc ioc; private ViewSettings viewSettings; public RouteViewResolve(Ioc ioc) { this.ioc = ioc; this.viewSettings = ViewSettings.$(); } public void handle(Request request, Response response, Route route) throws Exception { try { Method actionMethod = route.getAction(); Object target = route.getTarget(); int len = actionMethod.getParameterTypes().length; Object returnParam; if (len > 0) { Object[] args = MethodArgument.getArgs(request, response, actionMethod); returnParam = ReflectKit.invokeMehod(target, actionMethod, args); } else { returnParam = ReflectKit.invokeMehod(target, actionMethod); } if (null != returnParam) { Class returnType = returnParam.getClass(); RestController restController = target.getClass().getAnnotation(RestController.class); JSON json = actionMethod.getAnnotation(JSON.class); if (null != restController || null != json) { response.json(viewSettings.toJSONString(returnParam)); } else { if (returnType == String.class) { response.render(returnParam.toString()); } else if (returnType == ModelAndView.class) { ModelAndView modelAndView = (ModelAndView) returnParam; response.render(modelAndView); } } } } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { throw new BladeException(e.getCause()); } catch (Exception e) { throw e; } } public boolean intercept(Request request, Response response, Route route) throws BladeException { Method actionMethod = route.getAction(); Object target = route.getTarget(); if (null == target) { Class clazz = route.getAction().getDeclaringClass(); target = ioc.getBean(clazz); route.setTarget(target); } // execute int len = actionMethod.getParameterTypes().length; actionMethod.setAccessible(true); try { Object returnParam; if (len > 0) { Object[] args = MethodArgument.getArgs(request, response, actionMethod); returnParam = ReflectKit.invokeMehod(target, actionMethod, args); } else { returnParam = ReflectKit.invokeMehod(target, actionMethod); } if (null != returnParam) { Class returnType = returnParam.getClass(); if (returnType == Boolean.class || returnType == boolean.class) { return (Boolean) returnParam; } } return true; } catch (Exception e) { throw new BladeException(e); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy