目录
一.使用@RestController注解或者@Controller+@Responbody注解
一.使用@RestController注解或者@Controller+@Responbody注解
tips:
@RestController是@ResponseBody和@Controller的组合注解
@Controller是用来响应页面的,如果是string类型的方法,则springmvc会跳转到相应的页面(视图)
@ResponseBody是用来响应数据的,如果是对象类型的方法,则springmvc会将结果对象转成json格式输出给前端
本例中我使用的是@RestController注解,所以springmvc会将返回的对象Result自动转json返回给前端(底层默认是使用jsckson来实现数据格式转换的)
public Result add(@RequestBody WegoUser user){} @RequestBody是将前端传来的json数据转对象。默认不用加(springmvc会自动完成数据的封装)
返回前端的JSON数据格式:
package com.atqh.qhcommunity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
private boolean success;
private int code;
private String mag;
private Object data;
public static Result success(Object data) {
return new Result(true, 200, "success", data);
}
public static Result fail(int code, Object data) {
return new Result(false, code, "fail", data);
}
}
Controller层
package com.atqh.qhcommunity.controller;
import com.atqh.qhcommunity.Service.ArticleService;
import com.atqh.qhcommunity.dao.pojo.Article;
import com.atqh.qhcommunity.vo.Result;
import com.atqh.qhcommunity.vo.perem.PageParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class ArticleController {
@Autowired
private ArticleService articleService;
/**
* 分页显示所有文章,按照时间顺序降序排列
* @param pageParams
* @return
*/
/*@ResponseBody*/
@PostMapping //如果是getmapper,使用@Requestparam接收参数
public Result listArtilcle(@RequestBody PageParams pageParams) {
return articleService.listArticle(pageParams);
}
/**
* 阅读量最多的榜单
* @return
*/
@RequestMapping("/bigread")
public Result bigreadArticle() {
int limit = 5;
return articleService.bigreadArticle(limit);
}
/**
* 点赞数做多的榜单
* @return
*/
@RequestMapping("/bigagree")
public Result bigagreeArticle() {
int limit = 3;
return articleService.bigagreeArticle(limit);
}
}
Service层
package com.atqh.qhcommunity.Service.Impl;
import com.atqh.qhcommunity.Service.ArticleService;
import com.atqh.qhcommunity.dao.mapper.ArticleMapper;
import com.atqh.qhcommunity.dao.pojo.Article;
import com.atqh.qhcommunity.vo.Result;
import com.atqh.qhcommunity.vo.perem.PageParams;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleMapper articleMapper;
@Override
public Result listArticle(PageParams pageParams) {
Page<Article> articlePage = new Page<>(pageParams.getPage(), pageParams.getPageSize());
LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(Article::getCreateData);
Page<Article> articlePage1 = articleMapper.selectPage(articlePage, queryWrapper);
List<Article> records = articlePage1.getRecords();
return Result.success(records);
}
@Override
public Result bigreadArticle(int limit) {
LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(Article::getReady);
queryWrapper.last("limit " + limit);
queryWrapper.select(Article::getId, Article::getTitle, Article::getReady);
List<Article> articles = articleMapper.selectList(queryWrapper);
return Result.success(articles);
}
public Result bigagreeArticle(int limit) {
LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(Article::getAgree);
queryWrapper.select(Article::getId, Article::getTitle, Article::getAgree);
queryWrapper.last("limit " + limit);
List<Article> articles = articleMapper.selectList(queryWrapper);
return Result.success(articles);
}
@Override
public Result delArticleByArtId(int artid) {
LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Article::getId,artid);
queryWrapper.last("limit "+1);
articleMapper.delete(queryWrapper);
return null;
}
}
二,使用request传递参数
@RequestMapping("/goodsReturnReq.do")//请求子路径
public String goodsReturnReq(Goods goods,HttpServletRequest request){
System.out.println("goodsReturnReq:"+goods);
request.setAttribute("gds",goods);
return "goodsAddOK";//请求成功的返回路径
三.使用model传递参数
@RequestMapping("/getArticleById") /*通过id查看文章详情*/
public String getById(Integer pid, Model model){
List<Result> list = floorsService.findAllByPid(pid);
model.addAttribute("post",postsService.findById(pid));
model.addAttribute("hf",repliersService.findAllFloorsRep(list));
//通过页面地址返回页面
return "community-post";
}
四.使用modelandview视图解析器
modelandview是基于springmvc原生的产物
//返回一个模型视图对象
ModelAndView mv = new ModelAndView();
mv.addObject("msg","ControllerTest1");
mv.setViewName("test");
return mv;