springboot通过controller层实现页面切换
背景
通过springboot完成一个web项目时,想像springmvc一样通过controller层实现页面切换。
实现方式
//return "dashboard";//这是由模板引擎解析,然后拼串 //return "forward:/dashboard.html";//这是转发 return "redirect:/main.html";//这是重定向
最终浏览器返回的只是字符串本身:redirect:/main.html。而无法实现页面切换。
各种百度,无法解决。最后才发现是因为springboot注解的原因。
springboot控制层默认注解是:@restcontroller ,而@restcontroller是@controller 和 @responsebody的合体。
@responsebody会将返回值转换为字符串返回,所以得到的结果只能是字符串。
将@restcontroller 换成@controller 后,就实现了页面的切换。
package com.zr.gktjweb.controller.login; import com.zr.gktjweb.common.httpclientutil; import com.zr.gktjweb.common.responsebean; import com.zr.gktjweb.constant.syscode; import com.zr.gktjweb.model.sysuser; import com.zr.gktjweb.util.jsonutils; import com.zr.gktjweb.util.userutil; import io.swagger.annotations.api; import io.swagger.annotations.apiimplicitparam; import io.swagger.annotations.apiimplicitparams; import io.swagger.annotations.apioperation; import net.sf.json.jsonobject; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.value; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.responsebody; import javax.servlet.http.httpservletrequest; import java.util.hashmap; import java.util.map; @api(tags = "登录") @controller public class logincontroller { @value("${baseurl}") private string baseurl; @value("${login_url}") private string loginurl; @value("${logout_url}") private string logouturl; private static final logger logger = loggerfactory.getlogger(logincontroller.class); @apioperation(value = "登录", notes = "登录验证") @apiimplicitparams({@apiimplicitparam(name = "username", value = "姓名", required = true, datatype = "string"), @apiimplicitparam(name = "password", value = "密码", required = true, datatype = "string") }) @requestmapping(value = "/login.do", method = requestmethod.post) @responsebody public responsebean login(string username, string password) { string url = baseurl + loginurl; map<string, string> map = new hashmap<>(); map.put("username", username); map.put("password", password); string result = ""; //请求服务失败 try { result = httpclientutil.dopost(url, map); } catch (exception e) { e.printstacktrace(); logger.error("用户登录", e); return new responsebean(syscode.errcode, "系统异常,请联系管理员", ""); } jsonobject json = jsonobject.fromobject(result); //登录验证未通过 if (!json.getstring("code").equals(syscode.successcode + "")) { responsebean responsebean = jsonutils.jsontoobject(responsebean.class, result); return responsebean; } //验证通过,在session中设置token jsonobject datajson = (jsonobject) json.get("data"); string userjson = datajson.getstring("user"); sysuser sysuser = jsonutils.jsontoobject(sysuser.class, userjson); jsonobject tokenjson = (jsonobject) datajson.get("token"); string token = tokenjson.getstring("token"); userutil.settoken(token); userutil.setusersession(sysuser); // session.setattribute("token", token); // session.setattribute("user", sysuser); string url1 = "/index.html"; map<string, object> resmap = new hashmap<>(); resmap.put("url", url1); return new responsebean(syscode.successcode, "登录成功", resmap); } /** * 注销登录 * * @param request * @return */ @requestmapping("/loginout.do") public string loginout(httpservletrequest request) { request.getsession().invalidate(); string url=baseurl+logouturl; httpclientutil.doget(url); return "redirect:/"; } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论