Где я должен определить пользовательские методы для сущностей? - PullRequest
0 голосов
/ 29 марта 2019

Я создал сущность Post, которая имеет атрибут body, этот атрибут хранит уценку (текст), я хочу преобразовать body в html (и отобразить его в виде jsp), поэтому я добавил метод экземпляра вentity:

@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 для таких целей?

1 Ответ

0 голосов
/ 30 марта 2019

Я нашел этот учебник 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...