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:/";
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论