카테고리 없음

저자 여러명 넣기

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)
    }
}