안드로이드

안드로이드 Volley 라이브러리를 이용한 스프링과의 통신 예제!

알통몬_ 2018. 3. 30. 15:05
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 안드로이드와 스프링 간의 

http 통신 방법에 대해 공부합니다.


스프링과 안드로이드를 기본적으로 안다는 가정 하에 합니다.


1. 안드로이드 프로젝트 생성 및 Volley Library 추가하기

2018/01/05 - [안드로이드] - 안드로이드 Volley http 라이브러리 사용 예제!

이전 포스팅에서 라이브러리 추가하는 방법과 기본적인 사용 방법에 대해 포스팅했습니다.

안드로이드의 코드는 같습니다.

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
32
33
34
35
36
37
38
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RequestQueue queue = Volley.newRequestQueue(this);
        String url = "http://10.20.2.119:1992/commu/and";
 
        StringRequest request = new StringRequest(Request.Method.POST, url,
                //요청 성공 시
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("result""[" + response + "]");
                    }
                },
                // 에러 발생 시
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d("error""[" + error.getMessage() + "]");
                    }
                }) {
            //요청보낼 때 추가로 파라미터가 필요할 경우
            //url?a=xxx 이런식으로 보내는 대신에 아래처럼 가능.
            @Override
            protected Map<StringString> getParams() throws AuthFailureError {
                Map<StringString> params = new HashMap<>();
                params.put("param1""isGood");
                return  params;
            }
        };
 
        queue.add(request);
    }
}
 
cs


위 코드에서 url은 http://본인ip주소:포트번호/스프링콘텍스트이름/스프링에서 받을 경로

입니다.

스프링 콘텍스트 이름은 servlet-context.xml 파일의

<context:component-scan base-package="com.android.commu" />

에서 base-package의 마지막 경로 이름입니다.

저 같은 경우는 commu가 되겠죠?

그리고 아래 스프링 예제에서 보겠지만, value="값" 이 스프링에서 받을 경로가 됩니다.

, value="/and"

저는 /and 입니다.

그래서 위 예제에서 url= "" 의 경로가 나오게 된 겁니다.


2. 스프링 프로젝트 MVC 프로젝트생성하기

프로젝트를 생성하고 HomeController를 열면 아래처럼 코드가 있는데요.

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
32
33
34
35
36
37
38
39
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
 
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
 
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
    
    private static final Logger logger = 
LoggerFactory.getLogger(HomeController.class);
    
    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
        
        Date date = new Date();
        DateFormat dateFormat = 
DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        
        String formattedDate = dateFormat.format(date);
        
        model.addAttribute("serverTime", formattedDate );
        
        return "home";
    }
 
}
 
cs


--------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------



위 코드는 우리 예제에서 쓸 데가 없습니다 ㅎㅎ

아래 처럼 코드를 바꿔주는데요.

어노테이션을 두 가지 방법으로 추가할 수 있습니다.

1. @Controller + @ResponseBody

안드로이드와 스프링이 직접 통신하기 때문에 

@ResponseBody 어노테이션을 추가해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Controller
public class HomeController {
 
    @RequestMapping(method = RequestMethod.POST, value="/and")
    public @ResponseBody String and(HttpServletRequest httpServletRequest) {
        String result = "why not";
        String param1 = httpServletRequest.getParameter("param1");
        if(param1.equals("isGood")) {
            result = "very good";
        }
        return result;
    }
    
}
 
cs

2. @RestController

@ResponseBody 어노테이션의 역할을 포함하는 

@Controller 어노테이션이라고 간단히

알고 계시면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
public class HomeController {
 
    @RequestMapping(method = RequestMethod.POST, value="/and")
    public String and(HttpServletRequest httpServletRequest) {
        String result = "why not";
        String param1 = httpServletRequest.getParameter("param1");
        if(param1.equals("isGood")) {
            result = "very good";
        }
        return result;
    }
    
}
 
cs


각자 편하신 방법을 사용하시면 될 것 같습니다 ^^

3. 이클립스에서 HomeController 실행 + 안드로이드 앱 실행하기


안드로이드를 실행하면 위 사진처럼 결과를 받아볼 수 있습니다~


별로 어렵지 않죠?

스프링에 mybatis를 붙여 db와 연동하면 좀 더 다양한 기능을 수행할 수 있겠습니다 ㅎㅎ

제가 이전에 포스팅 한 것들 처럼요

2017/03/11 - [안드로이드] - 안드로이드 jsp mysql 연동 회원가입과 로그인 최종 정리


이상입니다.

감사합니다.

반응형