Springboot项目发布帖子 + 帖子详情功能模块实现

发布帖子

  • 1.利用Ajax
  • 2.先上一个小示例
  • 3.帖子功能(从后往前)
    • 3.1dao层
    • 3.2mapper层
  • 3.3.service层
    • 3.4.controller层
  • 3.5前端层

1.利用Ajax

  • Ajax:为Asynchronous JavaScript And Xml

  • 异步的JavaScript 和 xml,不是一门新技术,而是一个新术语

  • 使用Ajax,网页能够将增量更新呈现到页面上,而不需要去刷新整个页面

  • 虽然X代表XML,但目前基本都使用JSON,可以被所有语言解析

  • 使用jquery发送Ajax请求

  • 采用Ajax请求,实现发布帖子的功能

2.先上一个小示例

  • 看看怎么使用ajax发送以及接收json
public static String getJSONString(int code, String msg, Map<String, Object> map){
        JSONObject json = new JSONObject();
        json.put("code", code);
        json.put("msg", msg);
        if(map != null){
            for(String key : map.keySet()){
                json.put(key, map.get(key));
            }
        }

        return json.toJSONString();
    }

    public static String getJSONString(int code, String msg){
        return getJSONString(code, msg, null);
    }

    public static String getJSONString(int code){
        return getJSONString(code, null, null);
    }

    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("name", "zhangsan");
        map.put("age", 22);
        String res = getJSONString(0, "ok", map);
        System.out.println(res);
    }
  • 这就是json格式
    在这里插入图片描述

  • 样例开始:

  • 后端:

@RequestMapping(path = "/ajax", method = RequestMethod.POST)
    @ResponseBody
    public String testAjax(String name, int age){
        System.out.println(name);
        System.out.println(age);
        return CommunityUtil.getJSONString(0, "操作成功!");

    }
  • 前端:
<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <title>Ajax测试demo</title>
</head>
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<body>
    <p>
        <input type="button" value="发送" onclick="send();"/>
    </p>

<script>
    function send() {
        $.post(
            "/community/alpha/ajax",
            {"name": "张三", "age": 23},
            function (data) {
                console.log(typeof(data));
                console.log(data);
                data = $.parseJSON(data);
                console.log(typeof(data));
                console.log(data.code);
                console.log(data.msg);
            }
        );
    }
</script>
</body>
</html>
  • 运行结果:
    Springboot项目发布帖子 + 帖子详情功能模块实现_第1张图片

3.帖子功能(从后往前)

3.1dao层

public interface DiscussPostMapper {

    List<DiscussPost> selectDiscussPosts(int userId, int offset, int limit);

    // @Param注解用于给参数取别名,
    // 如果只有一个参数,并且在里使用,则必须加别名.
    int selectDiscussPostRows(@Param("userId") int userId);

    /**
     * 添加帖子方法
     * @param discussPost
     * @return
     */
    int insertDiscussPost(DiscussPost discussPost);

    /**
     * 根据帖子id查询帖子详情
     * @param id
     * @return
     */
    DiscussPost selectDiscussPostById(int id);

}

3.2mapper层

<insert id="insertDiscussPost" parameterType="DiscussPost">
        insert into discuss_post(<include refid="insertFields"></include>)
        values(#{userId},#{title},#{content},#{type},#{status},#{createTime},#{commentCount},#{score})
    </insert>

    <select id="selectDiscussPostById" resultType="DiscussPost">
        select <include refid="selectFields"></include>
        from discuss_post
        where id=#{id}
    </select>

3.3.service层

public class DiscussPostService {

    @Autowired
    private DiscussPostMapper discussPostMapper;

    @Autowired
    private SensitiveFilter sensitiveFilter;

    public List<DiscussPost> findDiscussPosts(int userId, int offset, int limit) {
        return discussPostMapper.selectDiscussPosts(userId, offset, limit);
    }

    public int findDiscussPostRows(int userId) {
        return discussPostMapper.selectDiscussPostRows(userId);
    }


    /**
     * 添加帖子
     */
    public int addDiscussPost(DiscussPost post){
        if(post == null){
            throw new IllegalArgumentException("参数不能为空!");
        }

        // 转义html标签
        post.setTitle(HtmlUtils.htmlEscape(post.getTitle()));
        post.setContent(HtmlUtils.htmlEscape(post.getContent()));
        // 过滤敏感词
        post.setTitle(sensitiveFilter.filter(post.getTitle()));
        post.setContent(sensitiveFilter.filter(post.getContent()));

        return discussPostMapper.insertDiscussPost(post);

    }

    /**
     * 显示帖子详情
     *
     */
    public DiscussPost findDiscussPostById(int id){
        return discussPostMapper.selectDiscussPostById(id);
    }

}

3.4.controller层

package com.nowcoder.community.controller;

import com.nowcoder.community.entity.DiscussPost;
import com.nowcoder.community.entity.User;
import com.nowcoder.community.service.DiscussPostService;
import com.nowcoder.community.service.UserService;
import com.nowcoder.community.util.CommunityUtil;
import com.nowcoder.community.util.HostHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;

/**
 * @author : wys
 * @date : 2020-11-25 20:29
 **/
@Controller
@RequestMapping("/discuss")
public class DiscussPostController {

    @Autowired
    private DiscussPostService discussPostService;

    @Autowired
    private HostHolder hostHolder;

    @Autowired
    private UserService userService;

    /**
     * 添加帖子功能
     */
    @RequestMapping(path = "/add", method = RequestMethod.POST)
    @ResponseBody
    public String addDiscussPost(String title, String content){
        User user = hostHolder.getUser();
        if(user == null){
            return CommunityUtil.getJSONString(403, "您还没有登录哦!");
        }

        DiscussPost post = new DiscussPost();
        post.setUserId(user.getId());
        post.setTitle(title);
        post.setContent(content);
        post.setCreateTime(new Date());
        discussPostService.addDiscussPost(post);
        // 报错的情况将来统一处理,这里先不处理
        return CommunityUtil.getJSONString(0, "发帖成功!");
    }


    /**
     * 显示帖子详情功能
     */
    @RequestMapping(path = "/detail/{discussPostId}", method = RequestMethod.GET)
    public String getDiscussPost(@PathVariable("discussPostId") int discussPostId, Model model){
        // 查询帖子
        DiscussPost post = discussPostService.findDiscussPostById(discussPostId);
        model.addAttribute("post", post);

        // 查询作者
        User user = userService.findUserById(post.getUserId());
        model.addAttribute("user", user);

        return "/site/discuss-detail";
    }
}

3.5前端层

  • 修改对应的链接即可,用thymeleaf模板替换

你可能感兴趣的:(springboot项目,ajax,java,springboot)