我创建了一个实体Post
,它具有一个属性body
,该属性存储markdown(文本),我想将body
转换为html(并在jsp视图中呈现),所以我向该实体添加了一个实例方法:
@Entity
@Table(name = "posts")
public class Post {
@NotBlank
private String body
// ... getters/setters
public String bodyToHtml() {
Parser parser = Parser.builder().build();
Node document = parser.parse(StringEscapeUtils.escapeHtml4(body));
HtmlRenderer renderer = HtmlRenderer.builder().build();
return renderer.render(document);
}
}
JSP:
<c:forEach var="post" items="${posts}">
<div class="post-body">
${post.bodyToHtml()}
</div>
<hr>
</c:forEach>
我想知道定义这样的方法的正确位置吗?为此目的,java / spring中的最佳实践是什么?
答案 0 :(得分:0)
我发现本教程https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application最终以DTO类PostDTO
结束,该类具有与原始Post
相同的属性和服务PostService
:
@Service
public class PostService {
private static final Parser parser = Parser.builder().build();
private static final HtmlRenderer htmlRenderer = HtmlRenderer.builder().build();
@Autowired
ModelMapper modelMapper;
@Autowired
PostRepository postRepository;
public List<PostDTO> getPostsList(int page, int pageSize) {
Page<Post> posts = postRepository.findAll(
PageRequest.of(page <= 0 ? 0 : page - 1, pageSize, new Sort(Direction.DESC, "createdAt"))
);
return posts.getContent()
.stream()
.map(post -> postToDTO(post))
.collect(Collectors.toList());
}
private PostDTO postToDTO(Post post) {
PostDTO dto = modelMapper.map(post, PostDTO.class);
Node document = parser.parse(StringEscapeUtils.escapeHtml4(post.getBody()));
dto.setBody(htmlRenderer.render(document));
return dto;
}
}
看起来好多了,感谢@DerM的有用提示。