티스토리 뷰
1차 오류
java.lang.AssertionError: Expected: is <false> but: was <true>
지금 repository를 만들어놓고 테스트 중인데, 계속해서 testFindById()에서 해당 오류가 떴다.
테스트이기때문에, 저 오류는 절대 뜨면 안되는 오류였다.
- test
@Test
@Order(3)
@DisplayName("상품을 아이디로 조회할 수 있다.")
void testFindById(){
var product = repository.findById(newProduct.getProductId());
assertThat(product.isEmpty(), Matchers.is(false));
}
- repository
@Override
public Optional<Product> findById(UUID productId) {
try {
return Optional.ofNullable(
jdbcTemplate.queryForObject("SELECT * FROM products WHERE product_id = :productId",
Collections.singletonMap("productId", productId.toString().getBytes()), productRowMapper));
}catch (EmptyResultDataAccessException e){
return Optional.empty();
}
}
원인 분석
일단 test 코드에 어떤 변수에 값이 들어오지 않았는지 파악했다.
System.out.println("testfindbyid : " + newProduct.getProductId());
System.out.println("testfindbyid : " + product.get());
2차 오류
java.util.nosuchelementexception: no value present
: newProduct의 id값은 잘 나왔지만, product의 id값은 나오지 않고 저 오류가 발생했다.
즉, product값은 없는 것이고, repository.findById(newProduct.getProductId()); 여기에서 문제가 발생했다는 것을 알 수 있었다.
getProductId()에는 문제가 없으므로 repository.findById 메소드가 문제라고 생각해서 해당 코드를 살펴보았다.
사실 이때 type 문제라는 감이 왔다. 그래서 type 위주로 코드를 살펴보았다.
1. findById()에 넣은 값의 타입이 UUID인가
2. 파라미터를 UUID로 받는가
3. SQL에 넣을 때, UUID type을 BYTE type으로 변환하였는가
1, 2번은 실행하지 않아도 알 수 있었고, 파라미터 값으로 productId값이 잘 도착했는지
sout으로 코드를 치고 실행하여 잘 도착했는지 확인할 수 있었다.
3번이 문제였다. - productId.toString().getBytes()
이게 productId type을 byte로 바꾸어주지 못하고 있었다.
그래서 UUID 타입을 BYTE로 바꾸어주는 메소드를 추가하였고 해당 함수를 호출하도록 코드를 변경해주었다.
- UUID --> BYTE
private byte[] convertUUIDToBinary(UUID uuid) {
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
return bb.array();
}
- 변경한 Repository
productId.toString().getBytes() --변경--> convertUUIDToBinary(productId)
해결!
'JAVA & Spring' 카테고리의 다른 글
- Total
- Today
- Yesterday
- randrange
- database연결
- randint
- baekjoon
- yolov8
- 10828번
- JAVA오류해결
- 파이썬
- 백준
- 에러발생
- 다인승
- gradleload오류
- 터틀그래픽 명령어
- 터틀그래픽
- UnsupportedClassVersionError
- tweepy
- 사람수세기
- streamlistener
- python공부
- konlpy
- Kkma
- 사람검출
- 다인승탑승
- Turtle Graphic
- YOLO
- 문제풀이
- 오븐시계
- 터틀그래픽예제
- springboot
- SPRING오류해결
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |