精华内容
下载资源
问答
  • java实现留言回复功能(可以无限回复递归)
    千次阅读
    2019-08-27 15:34:46

    java实现留言回复功能(可以无限回复递归)

    今天遇到一个项目上的需求,需要在留言反馈里加一个回复的功能,刚开始想的有些复杂,但是最后捋了一下思路用了将近两个小时终于写出来了。其实就只需要把所有数据查询出来一次,然后做一次递归操作。

    首先看实体类
    反馈留言:FeedbackMessage(BaseDomain只是一个基础的实体类而已)

    @Entity
    @Getter
    @Setter
    @Accessors(chain = true)
    @Table(name = "jl_supervision_proc_feedback")
    public class FeedbackMessage extends BaseDomain {
        private static final long serialVersionUID = -8595377684297725344L;
    
        @ApiModelProperty("反馈情况")
        @Lob
        @Column(columnDefinition = "TEXT")
        private String info;
    
        /**
         * 文件id
         */
        @Column(name = "fileIds")
        @ApiModelProperty("对应文件id,用&&&分割")
        private String fileIds;
    
        @ApiModelProperty("父类回复id 一级可以不传")
        private Long parentId;
    }
    

    响应类:FeedbackMessageResponse

    @ApiModel
    @Data
    @Accessors(chain = true)
    public class FeedbackMessageResponse {
        @ApiModelProperty("反馈留言id")
        private Long id;
    
        @ApiModelProperty("反馈留言内容")
        private String info;
    
        @ApiModelProperty("文件名:文件地址")
        private List<Map<String,String>> listMap = new ArrayList<>();
    
        @ApiModelProperty("修改时间")
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date updateTime;
    
        @ApiModelProperty(value = "操作人、当前用户id")
        private Long operatorId;
    
        @ApiModelProperty(value = "操作人名称")
        private String operatorName;
    
        @ApiModelProperty(value = "父类回复id")
        private Long parentId;
    
        @ApiModelProperty("子节点")
        List<FeedbackMessageResponse> childen = new ArrayList<>();
    }
    

    与之前类的区别可能只是加了一行代码

    	@ApiModelProperty("子节点")
        List<FeedbackMessageResponse> childen = new ArrayList<>();
    

    只贴关键代码了,其他的业务逻辑可以按自己的业务添加

    			List<FeedbackMessageResponse> treeResponseArrayList = new ArrayList<>();
    	        List<FeedbackMessageResponse> responses;
    			// 这里是jpa的分页条件查询
    			page = feedbackMessageRepository.findAll(specification, pageRequest)
                                                .map(this::getBean);
                // 遍历获得所有数据
                page.getContent().forEach(o -> {
                    FeedbackMessageResponse treeResponse = new FeedbackMessageResponse();
                    ObjectUtil.copyNotNullBean(o,treeResponse);
                    treeResponseArrayList.add(treeResponse);
                });
                responses = this.getTreeReponse(treeResponseArrayList);
    

    封装树形结构:getTreeReponse

    	/**
         * 封装树状图结构
         * @param treeResponseArrayList 所有记录
         * @return 封装后结果
         */
        private List<FeedbackMessageResponse> getTreeReponse(List<FeedbackMessageResponse> treeResponseArrayList) {
            // 创建根、非根节点集合
            List<FeedbackMessageResponse> listParentRecord = new ArrayList<>();
            List<FeedbackMessageResponse> listNotParentRecord = new ArrayList<>();
            // 查询并添加根、非根节点
            treeResponseArrayList.forEach(o -> {
                if (o.getParentId() == null){
                    // 根节点
                    listParentRecord.add(o);
                }else {
                    // 非根节点
                    listNotParentRecord.add(o);
                }
            });
    
            // 递归查询所有子节点
            if (CollectionUtil.isNotEmpty(listParentRecord)){
                listParentRecord.forEach(parent -> {
                    parent.setChilden(this.getChilden(parent.getId(),listNotParentRecord));
                });
            }
            return listParentRecord;
        }
    

    递归查询所有子节点:getChilden

    	/**
         * 递归查询所有子节点
         * @param parentId 根节点id
         * @param childenList 非根节点集合
         * @return 所有子节点
         */
        private List<FeedbackMessageResponse> getChilden(Long parentId, List<FeedbackMessageResponse> childenList) {
            // 创建根、非根节点集合
            List<FeedbackMessageResponse> listParentRecord = new ArrayList<>();
            List<FeedbackMessageResponse> listNotParentRecord = new ArrayList<>();
            // 遍历childenList找出所有根、非根节点
            childenList.forEach(record -> {
                if (ObjectUtil.equal(parentId,record.getParentId())){
                    listParentRecord.add(record);
                }else {
                    listNotParentRecord.add(record);
                }
            });
    
            // 继续查询子节点
            if (CollectionUtil.isNotEmpty(listParentRecord)){
                listParentRecord
                        .forEach(record -> record.setChilden(this.getChilden(record.getId(),listNotParentRecord)));
            }
    
            return listParentRecord;
        }
    

    注释应该写的很详细了,大家仔细看一下应该都可以看懂的。
    这是在实际项目中使用的哦,所以代码肯定是对的哈。
    如果有不懂的也欢迎提问哦。

    更多相关内容
  • 主要为大家详细介绍了JSP+JavaBean的留言板技术,JavaWeb登陆功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • ava实现简单的留言功能,主要是为了练习java的面向对象和IO流读取,本项目里主要就是对一个叫留言的txt文件进行读取和写入操作,非常实用,仅仅适合做java期末实训喔
  • java web实现简单留言功能

    千次阅读 2021-02-12 16:31:18
    本文实例为大家分享了java web实现简单留言板的具体代码,供大家参考,具体内容如下一、目标用户可以登录并记住密码进入留言板,添加留言,点击留言列表中的标题可显示该条留言全部内容。二、相关知识1、使用Cookie...

    本文实例为大家分享了java web实现简单留言板的具体代码,供大家参考,具体内容如下

    一、目标

    用户可以登录并记住密码进入留言板,添加留言,点击留言列表中的标题可显示该条留言全部内容。

    二、相关知识

    1、使用Cookie实现自动登录

    用户第一次登录网站,服务器将用户名和密码以Cookie的形式发送到客户端。当客户之后再次访问该网站时,浏览器自动将Cookie文件中的用户名和密码随请求一起发送到服务器,服务器从Cookie中取出用户名和密码并且通过验证。

    2、java类的定义与使用

    定义java类时注意属性的定义、构造方法的重写,定义两个方法,一个是访问方法(getter),一个是修改方法(setter)。

    三、实现思路

    1、登录

    输入用户名、密码登录,对应检测登录BoardLoginServlet

    可实现记住登录信息 Cookie实现

    登录成功显示留言板标题列表页面board-title.jsp,登录失败返回登录页面

    2、显示留言标题

    标题列表为上下文变量lists,其中标题为链接,点击可显示留言具体信息界面(跳转到MessageServlet处理)。

    list = username+":"+""+title+"";

    页面下方有新增留言的链接,点击后跳转到写留言页面

    新增留言

    3、添加留言

    输入标题、内容 post给WriteServlet

    4、显示留言具体信息

    在MessageServlet中遍历查找留言并传递变量,显示留言信息在board-message.jsp

    四、代码实现

    board-login.jsp

    登录界面

    昵称:

    密码:

    记住密码

    board-title.jsp

    留言板

    ${lists}

    新增留言

    boarrd-write.jsp

    标题:

    内容:

    board-message.jsp

    留言详情

    用户名:${name}

    标题:${title}

    内容:${text}

    时间:${date}

    Message.java(将留言信息存储在Message类中)

    package board;

    import java.util.Date;

    public class Message {

    private String title;//标题

    private String time;//时间

    private String username;//用户名

    private String text;//内容

    public Message(){}

    //初始化

    public Message(String title,String time,String username,String text){

    this.title = title;

    this.time = time;

    this.username = username;

    this.text = text;

    }

    public String getTitle(){

    return title;

    }

    public String getUsername(){

    return username;

    }

    public String getTime(){

    return time;

    }

    public String getText(){

    return text;

    }

    }

    BoardLoginServlet.java(用Cookie登录)

    package board;

    import javax.servlet.ServletException;

    import javax.servlet.http.*;

    import java.io.IOException;

    @javax.servlet.annotation.WebServlet(name = "BoardLoginServlet",urlPatterns = "/board.do")

    public class BoardLoginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset = utf-8");

    request.setCharacterEncoding("UTF-8");

    HttpSession session=request.getSession();

    String username = request.getParameter("username").trim();

    String password = request.getParameter("password").trim();

    session.setAttribute("username",username);

    if (!(username.equals("admin") &&password.equals("admin"))&&!(username.equals("123") &&password.equals("123"))) {

    response.sendRedirect("board-login.jsp");

    } else {

    if ((request.getParameter("check") != null) && (request.getParameter("check").equals("check"))) {

    Cookie nameCookie = new Cookie("username", username);

    Cookie pswdCookie = new Cookie("password", password);

    nameCookie.setMaxAge(60 * 60);

    pswdCookie.setMaxAge(60 * 60);

    nameCookie.setPath("/");

    pswdCookie.setPath("/");

    response.addCookie(nameCookie);

    response.addCookie(pswdCookie);

    String value1 = "", value2 = "";

    Cookie cookie = null;

    Cookie[] cookies = request.getCookies();

    if (cookies != null) {

    for (int i = 0; i < cookies.length; i++) {

    cookie = cookies[i];

    if (cookie.getName().equals("username"))

    value1 = cookie.getValue();

    if (cookie.getName().equals("password"))

    value2 = cookie.getValue();

    }

    if (value1.equals("admin") && value2.equals("admin")||value1.equals("123") && value2.equals("123")) {

    response.sendRedirect("board-title.jsp");

    } else {

    response.sendRedirect("board-login.jsp");

    }

    }

    }

    else

    {

    response.sendRedirect("board-title.jsp");

    }

    }

    }

    }

    WriteServlet.java(新增留言)

    package board;

    import javax.servlet.RequestDispatcher;

    import javax.servlet.ServletContext;

    import javax.servlet.ServletException;

    import javax.servlet.annotation.WebServlet;

    import javax.servlet.http.*;

    import java.io.IOException;

    import java.text.SimpleDateFormat;

    import java.util.ArrayList;

    import java.util.Date;

    import java.util.List;

    @WebServlet(name = "WriteServlet",urlPatterns = "/write.do")

    public class WriteServlet extends HttpServlet {

    //messages列表中存放Message类对象

    public List messages = new ArrayList();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=utf-8");

    ServletContext context = request.getServletContext();

    HttpSession session = request.getSession();

    //用户名存储到session中

    String username =(String)session.getAttribute("username");

    String title = request.getParameter("title");

    String text = request.getParameter("text");

    //获取当前时间

    SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss");

    Date date = new Date(System.currentTimeMillis());

    String time = formatter.format(date);

    //在messages列表中添加留言对象

    messages.add(new Message(title,time,username,text));

    context.setAttribute("messages",messages);

    String list = new String();

    //list中存放留言用户名+留言标题,标题为链接,可跳转到留言具体信息,并传参title

    list = username+":"+""+title+"";

    String lists = new String();

    //将留言标题列表信息存到上下文对象

    if(context.getAttribute("lists")!=null){

    lists = context.getAttribute("lists") + list + "
    ";

    }

    else{

    lists = list + "
    ";

    }

    context.setAttribute("lists", lists);

    request.setAttribute("lists", lists);

    //转发

    RequestDispatcher dispatcher = request.getRequestDispatcher("/board-title.jsp");

    dispatcher.forward(request, response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    }

    MessageServlet.java

    package board;

    import com.sun.net.httpserver.HttpContext;

    import javax.servlet.RequestDispatcher;

    import javax.servlet.ServletContext;

    import javax.servlet.ServletException;

    import javax.servlet.annotation.WebServlet;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import java.io.IOException;

    import java.io.PrintWriter;

    import java.util.ArrayList;

    import java.util.List;

    @WebServlet(name = "MessageServlet",urlPatterns = "/MessageServlet")

    public class MessageServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=utf-8");

    ServletContext context = request.getServletContext();

    List messages = new ArrayList();

    //获取列表

    messages = (List)context.getAttribute("messages");

    //获取链接中的参数title

    String title =request.getParameter("title");

    String name = new String();

    String date = new String();

    String text = new String();

    //遍历列表,查找该title的具体信息

    for(Message message : messages){

    if((message.getTitle()).equals(title)){

    name = message.getUsername();

    date = message.getTime();

    text = message.getText();

    title = message.getTitle();

    request.setAttribute("name",name);

    request.setAttribute("title",title);

    request.setAttribute("text",text);

    request.setAttribute("date",date);

    break;

    }

    }

    //将留言信息转发到board-message.jsp

    RequestDispatcher dispatcher = request.getRequestDispatcher("/board-message.jsp");

    dispatcher.forward(request, response);

    }

    }

    (以上仅为部分代码)

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • java留言

    2018-06-12 10:15:44
    自己做了这个简单的留言板 ,实现了获取全部留言和发布留言功能 ,仅此而已 还有很多东西没有考虑到,我是初学者,因此这个也只适合于初学者。不喜勿喷 注意☆☆:如果项目中jquery文件报错不用在意,那是编译器自动...
  • JAVA+SQLServer+jsp留言功能实现,包括连接数据库实现用户登录,登录前只能查看留言,登录后可以查看留言,发布留言,以及修改留言,管理员功能还没写好。
  • SpringBoot框架,前后端分离写的新闻管理系统,采用Ajax传输数据
  • 查看留言列表的时候需要组合条件查询,包括标题,时间段(起止日期),支持分页查询, 后期在项目中加入dwr框架实现ajax 加入freemaker实现伪静态化 采用存储过程分页 配置了log4j以及redis缓存 mysql文本链接: ...
  • java实现简单留言功能的代码实例

    千次阅读 2021-02-12 09:29:28
    java实现简单留言功能的代码实例数据库对应的表:guestbook:id ,name,phone,email,title,content,time; id新建web project:guestbookbuild Path:引入连接数据库的驱动的类库在webRoot目录中加入:+faceditor+js...

    java实现简单留言板功能的代码实例

    数据库对应的表:

    guestbook:id ,name,phone,email,title,content,time;                   id

    新建web project:guestbook

    build Path:引入连接数据库的驱动的类库

    在webRoot目录中加入:

    +faceditor

    +js

    web.xml

    代码:

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    AddMessageServlet

    webbook.guestbook.AddMessageServlet

    GetMessagesServlet

    webbook.guestbook.GetMessagesServlet

    AddMessageServlet

    /servlet/addMessage

    GetMessagesServlet

    /servlet/getMessages

    addMessage.htm

    代码:

    add message

    请您输入留言

    查看留言

    姓名:
    E-Mail:
    电话:
    主题:
    内容:

    var oFCKeditor = new FCKeditor("content");

    oFCKeditor.BasePath = '/guestbook/fckeditor/' ;

    oFCKeditor.Height = 300 ;

    oFCKeditor.ToolbarSet = 'Basic';

    oFCKeditor.Create() ;

    content.html

    display content

    留言内容

    编号12
    姓名liuwei
    电话2922266
    emailphpa@www.3ppt.com
    主题you can test
    内容test content!
    编号 
    姓名 
    电话 
    email 
    主题 
    内容 
    编号 
    姓名 
    电话 
    email 
    主题 

    内容

     

    validation-config.xml

    代码;

    ---------------------------------------------------------------------

    ******************************************************

    这是一个很有用的工具类,包含了:

    判读字符串参数是否为空:validateNull(String args)

    判断输入的字符串参数是否为空或者是"null"字符:chanageNull(String source, String target)

    过滤,n 字符的方法:filterHtml(String input)

    *****************************************************

    ---------------------------------------------------------------------

    StringUtil.java

    代码:

    package webbook.util;

    public class StringUtil {

    /**

    * 判断输入的字符串参数是否为空。

    * @param args 输入的字串

    * @return true/false

    */

    public static boolean validateNull(String args) {

    if (args == null || args.length() == 0) {

    return true;

    } else {

    return false;

    }

    }

    /**

    * 判断输入的字符串参数是否为空或者是"null"字符,如果是,就返回target参数,如果不是,就返回source参数。

    */

    public static String chanageNull(String source, String target) {

    if (source == null || source.length() == 0 || source.equalsIgnoreCase("null")) {

    return target;

    } else {

    return source;

    }

    }

    /**

    * 过滤,n 字符的方法。

    * @param input 需要过滤的字符

    * @return 完成过滤以后的字符串

    */

    public static String filterHtml(String input) {

    if (input == null) {

    return null;

    }

    if (input.length() == 0) {

    return input;

    }

    input = input.replaceAll("&", "&");

    input = input.replaceAll("

    input = input.replaceAll(">", ">");

    input = input.replaceAll(" ", " ");

    input = input.replaceAll("'", "'");

    input = input.replaceAll(""", """);

    input = input.replaceAll("n", "
    ");

    return input;

    }

    }

    AddmessageServlet.java

    代码;

    package webbook.guestbook;

    import java.io.IOException;

    import java.io.PrintWriter;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.PreparedStatement;

    import java.sql.SQLException;

    import java.text.SimpleDateFormat;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import webbook.util.StringUtil;

    public class AddMessageServlet extends HttpServlet {

    private static final long serialVersionUID = -8349454122547148005L;

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String url = "jdbc:oracle:thin:@192.168.1.20:1521:ora9";

    String username = "scott";

    String password = "tiger";

    String sql = "insert into guestbook (id,name,email,phone,title,content,time) values(gb_seq.nextval,?,?,?,?,?,?)";

    int result = 0;

    Connection conn = null;

    request.setCharacterEncoding("utf-8");

    String name = request.getParameter("name");

    String title = request.getParameter("title");

    response.setContentType("text/html;charset=utf-8");

    PrintWriter out = response.getWriter();

    out.println("");

    out.println("

    guestbook input page");

    out.println("

    ");

    if (StringUtil.validateNull(name)) {

    out.println("对不起,姓名不能为空,请您重新输入!
    ");

    out.println("添加新的留言
    ");

    } else if (StringUtil.validateNull(title)) {

    out.println("对不起,主题不能为空,请您重新输入!
    ");

    out.println("添加新的留言
    ");

    } else {

    try {

    Class.forName("oracle.jdbc.driver.OracleDriver");

    conn = DriverManager.getConnection(url, username, password);

    PreparedStatement pstmt = conn.prepareStatement(sql);

    pstmt.setString(1, StringUtil.filterHtml(name));

    pstmt.setString(2, StringUtil.filterHtml(request.getParameter("email")));

    pstmt.setString(3, StringUtil.filterHtml(request.getParameter("phone")));

    pstmt.setString(4, StringUtil.filterHtml(title));

    pstmt.setString(5, request.getParameter("content"));

    //设置格式化时间

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    pstmt.setString(6, sdf.format(new java.util.Date()));

    result = pstmt.executeUpdate();

    pstmt.close();

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (SQLException e) {

    e.printStackTrace();

    } finally {

    try {

    conn.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    if (result == 0) {

    out.println("对不起,添加留言不成功,请您重新输入!
    ");

    out.println("添加新的留言
    ");

    } else {

    out.println("祝贺您,成功添加留言。
    ");

    out.println("查看所有留言内容
    ");

    }

    out.println("");

    out.println("");

    out.flush();

    out.close();

    }

    }

    }

    GetMessageServlet.java

    代码:

    package webbook.guestbook;

    import java.io.*;

    import java.sql.*;

    import javax.servlet.*;

    import javax.servlet.http.*;

    import webbook.util.StringUtil;

    public class GetMessagesServlet extends HttpServlet {

    private static final long serialVersionUID = 5964428201228635704L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String url = "jdbc:oracle:thin:@192.168.1.20:1521:ora9";

    String username = "scott";

    String password = "tiger";

    String sql = "select * from guestbook order by id desc";

    Connection conn = null;

    response.setContentType("text/html;charset=utf-8");

    PrintWriter out = response.getWriter();

    out.println("");

    out.println("

    display messages");

    out.println("

    ");

    out.println("添加新的留言内容
    ");

    out.println("留言内容
    ");

    try {

    Class.forName("oracle.jdbc.driver.OracleDriver");

    conn = DriverManager.getConnection(url, username, password);

    PreparedStatement pstmt = conn.prepareStatement(sql);

    //查询结果是一个ResultSet对象。

    ResultSet rs = pstmt.executeQuery();

    while (rs.next()) {

    this.printRow(out, rs);

    }

    rs.close();

    pstmt.close();

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (SQLException e) {

    e.printStackTrace();

    } finally {

    try {

    conn.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    out.println(" ");

    out.println("");

    out.flush();

    out.close();

    }

    private void printRow(PrintWriter out, ResultSet rs) throws SQLException {

    out.println("

    out.println("

    编号");

    out.println("

    " + rs.getInt("id") + "");

    out.println("

    姓名" + rs.getString("name") + "");

    out.println("

    电话" +

    StringUtil.chanageNull(rs.getString("phone"), "没填") +

    "

    ");

    out.println("

    email" +

    StringUtil.chanageNull(rs.getString("email"), "没填") +

    "

    ");

    out.println("

    主题" + rs.getString("title") + " ");

    out.println("

    内容");

    out.println("

    " + StringUtil.chanageNull(rs.getString("content"), "没填") + "");

    out.println("

    时间" + rs.getString("time") + " ");

    out.println("


    ");

    }

    }

    展开全文
  • JAVA开发---微信文章留言功能实现

    千次阅读 2018-05-09 14:34:31
    概述最近应公司需求,对微信文章留言功能进行开发,然而由于微信文档描述贼简介,所以遇坑不断,特在此整理一下以便各位少走弯路。1. 留言功能开通首先,公众号需要具备可以进行留言的资格,如果你的公众号开通了...

    概述

    最近应公司需求,对微信文章留言功能进行开发,然而由于微信文档描述贼简单,所以遇坑不断,特在此整理一下以便各位少走弯路。


    1. 留言功能开通

    首先,公众号需要具备可以进行留言的资格,如果你的公众号开通了原创功能,那么留言也就自然而然的开通了,留言属于原创功能的附属功能。公众号的原创功能是微信官方主动邀请开通的,不能自己申请。如果你的公众号并没有原创功能,那么就没必要考虑留言功能了-.-

    下面说下微信官方对于原创功能开通的条件:

    1. 需要已运营了一定的时间,因为微信团队需要时间去评判发布的内容是否高质量,是否属于原创;
    2. 运营者需要在微信公众平台上保持一定的活跃度;
    3. 原创文章需要一定的数量,要有持续的输出;
    4. 原创的程度,微信系统会比对平台上所有历史、现在创造的文章,看看是否原创;
    5. 不能有抄袭等违规历史,这个非常重要。有很多申请原创保护的帐号,尽管现在在创作一些内容,但以前有抄袭历史,微信也会重视评判;
    6. 遵守原创规则。

    简单点说就是:注册时长+活跃度+原创文章数量+原创程度

    一般情况下,保持原创推送一两个月就可以收到微信的邀请了


    2. 接口变更

    这一点微信文档里写的很清楚,要注意之前的图文素材相关的接口都需要加上两个参数。need_open_comment 和 only_fans_can_comment。这里提一下,就不多说了。


    3.查看指定文章的留言数据接口

    留言开通,关闭,回复,删除接口都没问题,按文档来就行。下面说下获取文章留言获取接口,这是微信留言文档里面最大的坑。

    先说返回值吧,文档里的返回值乱的一批,刚开始看绝对一脸懵逼。我这里把我测试用的返回粘上供大家参考。

    {
      "errcode": 0,
      "total": 49,
      "errmsg": "ok",
      "comment": [
        {
          "user_comment_id": 66,
          "create_time": 1525421781,
          "comment_type": 1,
          "openid": "og33QsgCon_1RlXY7-XyZfJs",
          "reply": {
            "create_time": 1525675194,
            "content": "啦啦啦"
          },
          "content": "啦啦啦啦啦啦啦"
        },
        .....
        {
          "user_comment_id": 15,
          "create_time": 1525337621,
          "comment_type": 0,
          "openid": "og33QsgCon_1RlXY7-XyZfJs",
          "content": "拉拉阿拉蕾"
        }
      ]
    }            

    返回json就如上所示,其中total这个字段不是这篇文章的留言总数量,而是你这次接口请求得到的留言数量,这点需要注意。还有返回的json中的时间都是时间戳,需要进行转换。comment数组里存放的是根据留言时间进行倒序排序的留言。这关系到请求参数begin,需要留意下。user_comment_id 这个字段是从1开始递增的,删除留言不会影响递增顺序。


    接下来是请求参数

    这里写图片描述
    请求参数问题不大,需要注意的是begin这个参数,begin相当于comment数组的索引开始值,所以当begin为0的时候,就会从最新的留言开始获取。count不能>=50,说明一次最多取49条数据。

    以上便是请求微信文章留言数据需要注意的了。别的暂时没有发现。


    4.修改回复接口

    产品写的文档中提到了修改回复这个功能,微信目前并没有提供修改回复的接口,所以我做的就是分开处理,先删除之前的回复,再添加新的回复。这里需要注意一点,如果你在添加新的回复失败后,之前删掉的回复不能回滚,这块需要谨慎处理。


    5.总结

    微信提供的这个留言文档整体上来说还算详细,但也是遇坑不断。可能会有其他的坑我没发现,以后会慢慢完善。

    展开全文
  • 基于Java留言

    2015-08-04 10:32:13
    初来乍到 请多关照,这是一个关于Java项目里很小的一个留言功能
  • 新手 用作练手的ssm留言板项目.zip
  • java大作业之留言

    2018-06-27 11:37:11
    开发工具eclipse,b/s结构,连接了SQL数据库,具有登录、留言功能,删等功能
  • JSP+JavaBean的留言板技术 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <span style="font-size:16px;">Messages.html <HTML></span><...
  • jsp+Mysql实现简单的留言功能,可留言,可查看留言;可回复留言,可查看回复留言。内含源码、数据库和说明文档,可运行。简单勿喷,谢谢。
  • Java写的简易留言本,guestbook.dat是留言本的数据库文件,运行时需要在浏览器中安装Java插件。这仅是一个Java初学者例子,看上去像是留言本。
  • 留言板实现了留言的添加,修改,删除等功能。用到了Java,Sql Server,js等技术,开发环境为MyEclipse.
  • 基于Spring、Hibernate、Spring-MVC的留言本,基本功能有:发表留言留言回复、分页展示、管理员登陆注销、管理员删除和回复留言功能,内附一份已完成的实验报告模板。资源内容完整,导入eclipse中,修改jdbc、...
  • JAVA留言

    2014-04-09 17:06:43
    用javaweb写的留言本程序,可实现留言的查看删除等功能
  • java做的带回复的留言板 里面包括留言留言回复,留言管理等功能
  • 网络留言系统(Javaweb简易开发)

    千次阅读 2021-09-18 14:37:21
    要求:(1)用户在页面上输入用户名和密码登录,成功进入后可以看到所有的留言信息(2)用户可以自己添加,编辑留言,提交后可实时看到新增加的留言(3)系统提供新用户注册的功能 第一步:建立数据库test 我用的...
  • Java简单留言

    2021-03-16 06:34:49
    内容索引:Java源码,初学实例,留言本,初学实例 一个初学者的例子,完成类似留言本的功能
  • 带有留言功能的servlet实例。供学者更好的理解servlet的运行机制
  • Java实现评论回复功能的完整步骤

    千次阅读 2021-03-06 05:32:35
    前言使用递归循环开发评论回复功能,适用于大部分的简单单体应用评论功能或许是大多数的单体应用之中会用到的功能,我们会在自己所开发的项目之中进行集成该功能大多数时候我们会将评论功能划分成以下几种:单一型嵌...
  • Spring+SpringMVC+MyBatis框架 完成的新手项目 留言板项目 完整代码
  • 本资源是本人前面发过的一个局域网聊天工具的升级版。...代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有一定的帮助。 注:main函数在MainFrame类
  • 技术:Java、JSP等 摘要:留言板是Internet上的一种电子信息服务系统。它提供一块公共电子白板,每个用户都可以在上面书写,可发布信息或提出看法。它是一种交互性强,内容丰富而及时的Internet电子信息服务系统。...
  • JAVA留言版简单功能实现,主要给刚学习JSP的学习者学习的一个参考,里面有数据库代码 可以直接附加进去就可以用了

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,325
精华内容 26,930
关键字:

java留言功能

java 订阅