springboot如何通過controller層實(shí)現(xiàn)頁面切換
springboot通過controller層實(shí)現(xiàn)頁面切換
背景
通過springboot完成一個(gè)web項(xiàng)目時(shí),想像springmvc一樣通過controller層實(shí)現(xiàn)頁面切換。
實(shí)現(xiàn)方式
//return "dashboard";//這是由模板引擎解析,然后拼串 //return "forward:/dashboard.html";//這是轉(zhuǎn)發(fā) return "redirect:/main.html";//這是重定向
最終瀏覽器返回的只是字符串本身:redirect:/main.html。而無法實(shí)現(xiàn)頁面切換。
各種百度,無法解決。最后才發(fā)現(xiàn)是因?yàn)閟pringboot注解的原因。
springboot控制層默認(rèn)注解是:@RestController ,而@RestController是@Controller 和 @ResponseBody的合體。
@ResponseBody會(huì)將返回值轉(zhuǎn)換為字符串返回,所以得到的結(jié)果只能是字符串。
將@RestController 換成@Controller 后,就實(shí)現(xiàn)了頁面的切換。
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 = "登錄驗(yàn)證") @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 = ""; //請(qǐng)求服務(wù)失敗 try { result = HttpClientUtil.doPost(url, map); } catch (Exception e) { e.printStackTrace(); LOGGER.error("用戶登錄", e); return new ResponseBean(SysCode.errCode, "系統(tǒng)異常,請(qǐng)聯(lián)系管理員", ""); } JSONObject json = JSONObject.fromObject(result); //登錄驗(yàn)證未通過 if (!json.getString("code").equals(SysCode.successCode + "")) { ResponseBean responseBean = JSONUtils.jsonToObject(ResponseBean.class, result); return responseBean; } //驗(yàn)證通過,在session中設(shè)置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:/"; } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot如何實(shí)現(xiàn)調(diào)用controller和Service層方法
- springboot中的controller參數(shù)映射問題小結(jié)
- springboot中Controller內(nèi)文件上傳到本地及阿里云操作方法
- springboot Controller直接返回String類型帶來的亂碼問題及解決
- SpringBoot之controller參數(shù)校驗(yàn)詳解
- springboot中@RestController注解實(shí)現(xiàn)
- SpringBoot通過注解監(jiān)測(cè)Controller接口的代碼示例
- springboot controller參數(shù)注入方式
- SpringBoot中@RestControllerAdvice @ExceptionHandler異常統(tǒng)一處理類失效原因分析
- SpringBoot和MybatisPlus實(shí)現(xiàn)通用Controller示例
相關(guān)文章
MyBatis-Plus實(shí)現(xiàn)分頁的方法使用詳解
這篇文章主要為大家介紹了MyBatis-Plus的分頁的方法使用,包括:不傳參數(shù)時(shí)的默認(rèn)結(jié)果、查詢不存在的數(shù)據(jù)、手動(dòng)包裝page和自定義SQL,需要的可以參考一下2022-03-03微信、支付寶二碼合一掃碼支付實(shí)現(xiàn)思路(java)
這篇文章主要為大家詳細(xì)介紹了微信、支付寶二碼合一掃碼支付實(shí)現(xiàn)思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08System.getProperty(user.dir)定位問題解析
System.getProperty(user.dir) 獲取的是啟動(dòng)項(xiàng)目的容器位置,用IDEA是項(xiàng)目的根目錄,部署在tomcat上是tomcat的啟動(dòng)路徑,即tomcat/bin的位置,這篇文章主要介紹了System.getProperty(user.dir)定位問題,需要的朋友可以參考下2023-05-05tdesign的文件上傳功能實(shí)現(xiàn)(微信小程序+idea的springboot)
這篇文章主要介紹了tdesign的文件上傳(微信小程序+idea的springboot)的相關(guān)知識(shí),本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-09-09