计数(唯一)视图Spring引导REST

时间:2017-12-08 03:14:15

标签: java spring rest spring-boot

我正在使用RESTful服务的Spring启动应用程序,基于JWT的身份验证并作为前端做出反应。

我想构建一个计数器来监视我的RestController中某些REST端点的唯一用户请求(例如每天),并将当前值存储到数据库中的列。

具体而言,我想了解每天有多少用户点击某篇文章(api/articles/{id})并将该值绑定到该实体。

实体:

@Data
@Builder
@AllArgsConstructor
@RequiredArgsConstructor
@Entity
@Table(name = "Article")
public class Article{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "message_id", unique = true, nullable = false)
    private Long id;

    @Column(name = "visits")
    private Long visitCounter;

    ...
}

控制器:

@RestController
@RequestMapping("/api/articles")
public class ArticleController {

    private AppUserService userService;
    private ArticleService articleService ;

    @Autowired
    public ArticleController (AppUserService userService, ArticleService articleService ) {
        this.userService = userService;
        this.articleService = articleService;
    }


    @GetMapping(value = "/{id}")
    public ResponseEntity<Article> getArticleById(@PathVariable(value = "id") Long  articleId) {
        Article article = articleService .getArticleById(articleId);
        if(article == null) {
            return ResponseEntity.notFound().build();
        }
         articleService.countVisit(); //???
         return ResponseEntity.ok().body(article);
    }
}

...

有什么想法可以实现吗?

1 个答案:

答案 0 :(得分:1)

假设您有应用程序范围的bean ArticleCountService。该服务应该有一个地图&gt;对于柜台。

关键是文章路径(或ID或标识您文章的内容)。该值是用户集(例如,用于标识您可以从HttpServletRequest获取的唯一用户的IP地址)。在23:59:999,您将获得地图数据并创建一个新的空地图。 这是最简单的解决方案,但它可能会对内存产生影响。

模式方便的方法是在DB中存储内容。例如。 ARTICLE_ID,USER_ID(IP),VISIT_DATE

每天聚集一次数据(计算后可以删除昨天过时的行。)