카테고리 없음
저자 여러명 넣기
challnum
2022. 9. 10. 13:23
에러 상황
저자를 여러명을 넣기 위해 배열에 담아서 DB에 저장을 하려고 하였으나 값이 맞지 않는 에러가 발생하였다.
에러 코드
- 생각하기에 배열을 선언한 후 입력 받는 값들을 ,와 빈칸으로 나누어 하나씩 값들을 넣어서 저장을 하면 될것이라고 생각을 했다.
- 하지만 타입이 맞지 않는 에러가 발생을 했고 String으로 선언이 되어 있는 값에 배열을 저장하려고 하니 생긴 에러였다.
@Override
@Transactional
public Long createBook(BookRequestDto requestDto) {
String[] bookAuthor = requestDto.getAuthor().split(",| ");
System.out.println(Arrays.toString(requestDto.getAuthor().split(",")));
return bookRepository.save(Book.builder()
.bookName(requestDto.getBookname())
.extinction(requestDto.getExtinction())
.isbn(requestDto.getIsbn())
.bookpage(requestDto.getBookpage())
.age(requestDto.getAge())
.price(requestDto.getPrice())
.currency(requestDto.getCurrency())
.author(bookAuthor)
//저자는 []타입으로 지정해서 안 들어감
.build()).getId();
}
해결 방안
- 선언된 타입이 Sting형이기에 입력 받은 여러 명의 저자들을 하나의 String으로 선언 해주는 방법이 필요했다.
- java.util.Arrays.toString() 메소드는 파라미터로 배열을 입력받아서, 배열에 정의된 값들을 문자열 형태로 만들어서 리턴해 주기에 사용하기로 하였다.
해결 코드
@Override
@Transactional
public Long createBook(BookRequestDto requestDto) {
String bookAuthor = Arrays.toString(requestDto.getAuthor().split(",| "));
return bookRepository.save(Book.builder()
.bookName(requestDto.getBookname())
.extinction(requestDto.getExtinction())
.isbn(requestDto.getIsbn())
.bookpage(requestDto.getBookpage())
.age(requestDto.getAge())
.price(requestDto.getPrice())
.currency(requestDto.getCurrency())
.author(bookAuthor)
.build()).getId();
}
결과 값 확인 시 다른 에러 발견
해결 방식
1. trim을 이용하여 빈 칸을 제거 하려 하였으나 빈칸의 값 자체가 문자열의 양 쪽 끝에만 해당하였기에 해결 되지 않았다.
2. replace를 이용하여 모든 빈칸을 제거하는 구문을 사용하였다.
해결 코드
package com.example.assignment.Service;
import com.example.assignment.DTO.BookRequestDto;
import com.example.assignment.DTO.BookResponseDto;
import com.example.assignment.Domain.Book;
import com.example.assignment.Repository.BookRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Currency;
@Service
@RequiredArgsConstructor
public class BookServicelmpl implements BookService{
private final BookRepository bookRepository;
@Transactional(readOnly = true)
@Override
@Transactional
public Long createBook(BookRequestDto requestDto,String local) {
String bookAuthor = requestDto.getAuthors().replaceAll("\\s", "");
return bookRepository.save(Book.builder()
.authors(bookAuthor)
}
}