오류 및 문제점
- 문제점: 코드를 통해 직접 접근하였기 때문에 요청에 대하여 응답할 수 없다.
- 해결 방안: 이전 페이지에 대한 정보를 저장한다.
String img = imageObj.get("imageKey").toString();
URL urlInput = new URL(AwsUtil.getImageURL(img));
HttpURLConnection connection = (HttpURLConnection) urlInput.openConnection();
connection.setRequestProperty("Referer", img);
BufferedImage urlImage = ImageIO.read(connection.getInputStream());
2. 403 for aws s3
- 문제점: 이미지 주소를 전달받아 AWS S3에 접근하니 403 에러가 발생한다.
- 해결 방안: AWS에 저장될 때는 한글이 인코딩된다. 따라서 front에서 이미지 key를 전달 받은 후 직접 이미지 주소를 불러오는 방법으로 수정한다.
진행 상황
1. 게시글 내 경비 정보
@PostMapping("/sns/{expNo}")
public JSONObject postExpWithSns(@PathVariable Long expNo) {
ExpVO tmpExp = erepo.findById(expNo).orElse(null);
JSONObject exp = new JSONObject();
exp.put("expTitle", tmpExp.getExpTitle());
exp.put("expPlace", tmpExp.getExpPlace());
exp.put("expMoney", tmpExp.getExpMoney());
return exp;
}
2. 닉네임 검색
- 검색어가 포함되는 닉네임의 사용자 리스트 조회
@PostMapping("/nickname")
public List<UserSimpleDto> postSearchNickname(@RequestBody JSONObject obj) {
List<UserVO> tmpUserList = urepo.findByUserNickContaining(obj.get("nickname").toString());
List<UserSimpleDto> userList = new ArrayList<>();
tmpUserList.forEach(user -> {
UserSimpleDto u = UserSimpleDto.builder()
.userNo(user.getUserNo())
.userNick(user.getUserNick())
.userProfile(AwsUtil.getImageURL(user.getProfile().getProfilePhoto()))
.build();
userList.add(u);
});
return userList;
}
3. SnsDto util 생성
- 게시글 이미지 링크 가져오기
- 작성자 정보 가져오기
- 댓글 가져오기
- 좋아요 여부 가져오기
- 해시태그 가져오기
public class MakeSnsUtil {
public static String getSnsImages(String snsPhoto) {
String photo = "";
String[] images = snsPhoto.split("@");
for (int i = 0; i < images.length; i++) {
photo += AwsUtil.getImageURL(images[i]);
if (i != images.length - 1) {
photo += "@";
}
}
return photo;
}
public static UserSimpleDto getAnyUser(Long userNo, UserRepository urepo) {
UserVO tmpUser = urepo.findById(userNo).orElse(null);
UserSimpleDto user = UserSimpleDto.builder().userNo(tmpUser.getUserNo()).userNick(tmpUser.getUserNick())
.userProfile(AwsUtil.getImageURL(tmpUser.getProfile().getProfilePhoto())).build();
return user;
}
public static List<ReplyDto> getSnsReply(SnsVO sns, ReplyRepository rrepo, UserRepository urepo) {
List<ReplyVO> tmpReplyList = rrepo.findBySns(sns);
List<ReplyDto> replyList = new ArrayList<>();
tmpReplyList.forEach(tmpReply -> {
ReplyDto reply = ReplyDto.builder().snsNo(sns.getSnsNo()).replyNo(tmpReply.getReplyNo())
.replyContent(tmpReply.getReplyContent()).replyRegdate(tmpReply.getReplyRegdate())
.replyUser(getAnyUser(tmpReply.getUser().getUserNo(), urepo)).build();
replyList.add(reply);
});
return replyList;
}
public static boolean getSnsHeart(SnsVO sns, Long userNo, HeartRepository hrepo) {
MultiKey key = MultiKey.builder().sns(sns.getSnsNo()).user(userNo).build();
return hrepo.findById(key).orElse(null) != null;
}
public static String getSnsHashtag(SnsVO sns, HashtagRepository tagrepo) {
List<HashtagVO> tagList = tagrepo.findBySns(sns);
String tag = "";
for (int i = 0; i < tagList.size(); i++) {
HashtagVO tmpTag = tagList.get(i);
tag += "#" + tmpTag.getHtHashtag();
if (i != tagList.size() - 1) {
tag += "@";
}
}
return tag;
}
}
4. 해시태그 검색
- 로그인 전 완료: 검색어와 일치하는 해시태그를 가진 전체 공개 게시글
List<SnsVO> tmpSnsList = null;
if(obj != null) {
} else {
tmpSnsList = srepo.findByHashtagInAndSnsScope(tagList, 1);
}
참고 자료