java 메시지 답장 기능 구현(무한 답장 귀속 가능)
4950 단어 java 백엔드 개발메모판귀속
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
이전 클래스와의 차이는 단지 코드를 한 줄 추가했을 수도 있다
@ApiModelProperty(" ")
List childen = new ArrayList<>();
핵심 코드만 붙이면 다른 업무 논리는 자신의 업무에 따라 추가할 수 있다
List treeResponseArrayList = new ArrayList<>();
List 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 getTreeReponse(List treeResponseArrayList) {
// 、
List listParentRecord = new ArrayList<>();
List 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 getChilden(Long parentId, List childenList) {
// 、
List listParentRecord = new ArrayList<>();
List 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;
}
주석은 매우 상세하게 썼을 것이니, 모두가 자세히 보면 모두 이해할 수 있을 것이다.이것은 실제 프로젝트에서 사용하는 것이기 때문에 코드가 틀림없이 맞을 것이다.모르는 게 있으면 질문도 환영합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단한 게시판텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.