고등어통조림
748
2019-07-03 20:33:51
6
185

MyBatis 의 resultType 질문입니다


 매퍼는 이렇게 되어 있습니다. 단지 화면에서 id, pw를 입력 받은 후에 그게 디비에서 조회가 되서 

id가 있는지 없는지 결과값 뷰로 보내주고, 또는 pw가 맞는지 안 맞는지 결과값을 뷰로 보내주는 것을 구성중인데요


<mapper namespace="kr.co.petit.mapper.StoreMapper">

 

 <select id = "login" resultType="kr.co.petit.domain.StoreVO">

  <![CDATA[

  select *

  from tbl_stores

  where S_id= #{S_id} and S_pw= #{S_pw}

  ]]>

 </select>

 </mapper>


포스트맨에서 이렇게 입력하고 send 테스트를 하면(포스트 방식이라 주소는 그냥 /login 입니다)

{

"s_id": "aaa",

"s_pw": "bbb"

}

컨트롤러는 지금은 그냥 단순하게 이렇게 되어 있습니다.

@Autowired

private StoreLoginService storeLoginService;

@RequestMapping(value="/login", method=RequestMethod.POST,

produces = "application/json")

public StoreVO storeLogin(@RequestBody StoreVO vo)

throws JSONException{

log.info("storeLoginService...............");

return storeLoginService.storeLogin(vo);

}

포스트맨은 문제가 없는데 이클립스의 로그를 보면
|---------|---------|---------|---------|--------------|---------|---------|---------|---------|----------|--------------|----------------|---------|---------|---------|---------|------------|
|s_id     |s_pw     |s_index  |s_name   |s_instance_id |s_phone  |s_add    |s_lat    |s_lon    |s_manager |s_manager_num |s_manager_email |s_join   |s_group  |promoter |s_grade  |s_secession |
|---------|---------|---------|---------|--------------|---------|---------|---------|---------|----------|--------------|----------------|---------|---------|---------|---------|------------|
|[unread] |[unread] |[unread] |[unread] |[unread]      |[unread] |[unread] |[unread] |[unread] |[unread]  |[unread]      |[unread]        |[unread] |[unread] |null     |[unread] |[unread]    |
|---------|---------|---------|---------|--------------|---------|---------|---------|---------|----------|--------------|----------------|---------|---------|---------|---------|------------|


모든 컬럼들이 unread가 뜨는데요..
검색을 해보니 vo랑 매퍼랑 연결이 안 되서 그렇다고 하는데...
근데 보통 매퍼의 resultType을 저렇게 vo의 전체 경로를 다 적어주면 되는거 아닌가요?
제가 무슨 실수를 한건지요?
0
0
  • 답변 6

  • NULL만나면
    2k
    2019-07-03 21:13:09

    혹시 storeLogin()에 @ResponseBody 빠진거 아닌가요?

    1
  • 사는게힘듭니다
    2019-07-03 21:17:45 작성 2019-07-03 21:18:35 수정됨

    @ResponseBody 어노테이션이 빠졌네요.

    ajax로 /login 이란 url을호출하면서 파라미터로 아이디와 암호를 넘기고

    아이디와 암호의 존재여부를 알려면 


    저 어노테이션을붙혀줘야합니다.


    컨트롤러의 메소드타입이 모델엔뷰나 String이면 모델(DB결과물) 및 JSP페이지이름인데

    이게 아니면은 

    저 url을 호출한쪽으로  url매핑메소드의 리턴값을 넘겨줍니다.

    보니까 VO객체를 넘기는거 같은데  클라이언트가 서버로부터 VO객체를 리턴받을수있는 

    스프링 Jaskson 라이브러리 찾아보세요. 

    1
  • 고등어통조림
    748
    2019-07-03 22:27:58 작성 2019-07-03 22:37:08 수정됨

    아, 답변 감사합니다

    현재 스프링은 서버쪽인 백단이고...

    포스트맨이 모바일기기인 클라이언트인데요... 그래도 @ResponseBody 인가요?


    그리고 저 코드가 최종 코드가 아니라서... 최종으로 하려는 것은 프론트(모바일, 현재 테스트는 포스트맨에서 raw 의 body 에 

    {

    "s_id": "aaa",

    "s_pw": "bbb"

    }

    입력하고 send를 눌러서 웹브라우저의 form을 대신한다고 생각하고 테스트중입니다(모바일기기에서도 form 형식이겠죠...)

    저렇게 입력해서 스프링쪽으로 날리면 디비 조회해서 id 있는지, pw 맞는지 결과값을 

    다시 보내야 합니다.

    보통 로그인을 위해서 이런 로직을 짜고 있는데(스프링의 시큐리티도 사용 안 하고 단순히 디비에서 조회해서 Id, PW 있는지, 맞는지만 체크하는 방식의 로그인입니다.)

    결과를 프론트로 리턴할때 다시 vo를 넘길 필요가 없는 건가요?

    단순히 "실패" or "성공" 이런 스트링만 return 해주면 되나요?

    이런 쪽 개발은 처음이라 개념이 잘 안 잡힙니다.

    0
  • 고등어통조림
    748
    2019-07-03 22:38:38 작성 2019-07-03 22:40:45 수정됨

    아.... 더 생각해 보니 vo까지 넘길 필요가 없는 것 같네요

    맞나요?

    0
  • 고등어통조림
    748
    2019-07-03 22:40:32

    아............ 질문글에 하나가 빠졌는데


    컨트롤러에 @Controller가 아니라 @RestController 입니다..

    0
  • 고등어통조림
    748
    2019-07-03 22:41:40 작성 2019-07-03 22:48:24 수정됨

    그리고 포스트맨에서 테스트할때 S_id 말고 s_id로 바꾸니 unread는 안 뜨고 이클립스에도 select 값이 로그로 남습니다.


    그리고 스프링에 

    // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind

    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.8'


    이 라이브러리를 추가 했습니다. (Gradle 입니다)


    뭔진 잘 모르겠지만 이것도 추가해놨습니다.

    // https://mvnrepository.com/artifact/org.json/json

    compile group: 'org.json', name: 'json', version: '20180813'

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.