본문 바로가기

Spring실습

안드로이드스튜디오와 스프링부트에서 @DeleteMapping, @DELETE 사용하기

반응형

저번 시간에 이어서 
https://pinlib.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8%EC%9D%98-PUT-PutMapping

 

안드로이드스튜디오와 스프링부트의 @PUT, @PutMapping

어쩌면 오랜만이겠죠 이번에는 안드로이드 스튜디오와 스프링부트에서 PUT method를 구현하는 방법을 소개해보겠다. put이란 update의 기능을 수행할 때 사용한다. 우선 android studio part이다. UserAPI.kt

pinlib.tistory.com

이번에는 안드로이드 스튜디오와 스프링부트에서 delete method를 구현하는 방법을 알아보겠다.

 

솔직히 생각보다 오래걸렸다.

미리 짜놓은 예상 코드가 한번에 될 줄 알았지만 아니었고 

점점 더 실패해서 수 많은 시행착오를 겪었다.

 

우선 android part다. (UserAPI.kt)

@DELETE("user/delete/{userId}")
fun adminDeleteUser(@Path("userId") userId: String):Call<List<UserModel>>

 

이제부터는 spring boot part다.

 

1. UserController.java

@DeleteMapping("user/delete/{userId}")
public List<UserDTO> deleteUser(@PathVariable String userId){
    return userService.adminDeleteUser(userId);
}

 

 

2. UserServiceImpl.java

@Override
public List<UserDTO> adminDeleteUser(String userId){
    List<User> entities = userDataHandler.adminDeleteUserEntity(userId);
    //List<User> entities = userRepository.findByUserId(userId);

    if(entities != null) {
        List<UserDTO> dtos = new ArrayList<>();

        for(User entity : entities){
            UserDTO userDTO = new UserDTO();
            userDTO.setUserId(entity.getUserId());
            userDTO.setUserPassword(entity.getUserPassword());
            userDTO.setUserName(entity.getUserName());
            userDTO.setUserEmail(entity.getUserEmail());
            userDTO.setUserAge(entity.getUserAge());
            dtos.add(userDTO);
        }
        return dtos;

    }
    return null;

    /*List<UserDTO> dtos = new ArrayList<>();
    for(User entity : entities){
        UserDTO userDTO = new UserDTO();
        userDTO.setUserId(entity.getUserId());
        userDTO.setUserPassword(entity.getUserPassword());
        userDTO.setUserName(entity.getUserName());
        userDTO.setUserEmail(entity.getUserEmail());
        userDTO.setUserAge(entity.getUserAge());
        dtos.add(userDTO);
    }
    return dtos;*/
}

사실 이 부분 때문에 다 만들어도 만든 것 같지가 않다.

오늘 올리는 글의 모든 코드들은 목적에 맞게 잘 작동하지만 

log에서 경고 message가 출력된다.

 

우선 이 코드의 경우 if문을 쓰지 않고 그냥 주석부분을 사용하면 null 경고가 뜨긴하는데 error가 아닌 warn으로 나오고
잘 작동한다.

 

허나 android part에서 retrofit 통신을 받는 부분에서 onResponse에서 isSuccessful에서 else의 영역으로 받아들이는데
db에는 정상적으로 지워지고 android emulator상에도 문제는 없다.

 

그리고 그냥 올려 놓은 해당 코드로 진행할 경우

spring boot에서  null warn은 뜨지 않는다.

그런데 android part에서 onResponse가 아닌 onFailure로 받아들인다. 허나 위의 경우와 동일하게 

db에는 정상적으로 지워지고 android emulator상에도 문제는 없다.

 

문제에 답을 안다면 댓글로 알려주라. 진짜 모르겠다.

 

 

DAO와 기타등등의 code들은 전에 올렸던 것들과 비슷하고

 

3. UserRepository.java

public interface UserRepository extends JpaRepository<User, String> {
    //User findByUserIdContaining(String keyword);

    //User findByUserIdContaining(String keyword);
    User findByUserIdContaining(String userId);

    List<User> findByUserId(String userId);

    List<User> deleteByUserId(String userId);


}

요정도? 된다.

 

결과

*삭제 전

 

*삭제 후

반응형