【问题标题】:What's the best way to handle ResponseEntity on UI side?在 UI 端处理 ResponseEntity 的最佳方法是什么?
【发布时间】:2019-12-02 08:42:45
【问题描述】:
我有一个用户页面,我必须在页面加载后显示他和他的朋友写的所有帖子。在 UI 端执行此操作的最简单方法是什么?我正在使用 Thymeleaf + Spring。
@RequestMapping(method = RequestMethod.GET, path = "/getBasicPosts")
public ResponseEntity<Object> getUSerAndFriendsPosts(String userId) {
List<Post> postList;
try {
postList = postService.getUserAndFriendsPosts(Long.valueOf(userId));
} catch (Exception otherExc) {
return new ResponseEntity<>(otherExc.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<>(postList, HttpStatus.OK);
}
【问题讨论】:
标签:
java
html
spring-boot
spring-mvc
thymeleaf
【解决方案1】:
你使用 Thymeleaf + Spring,你的控制器必须返回 thymeleaf 模板的路径:
@RequestMapping("/getBasicPosts/{userId}")
public String showBasicPosts(Model model, @PathVariable("userId") String userId) {
Object obj = getUSerAndFriendsPosts(String userId).getBody();
model.addAttribute("obj", obj);
return "path/of/template";
}
private ResponseEntity<Object> getUSerAndFriendsPosts(String userId) {
List<Post> postList;
try {
postList = postService.getUserAndFriendsPosts(Long.valueOf(userId));
} catch (Exception otherExc) {
return new ResponseEntity<>(otherExc.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<>(postList, HttpStatus.OK);
}
当然你应该添加一些属性来告诉 Spring Thymeleaf 模板的位置:
@Bean
@Description("Thymeleaf Template Resolver")
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
return templateResolver;
}
@Bean
@Description("Thymeleaf Template Engine")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setTemplateEngineMessageSource(messageSource());
return templateEngine;
}