공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 안드로이드와 스프링 간의
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<String, String> getParams() throws AuthFailureError { Map<String, String> 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 연동 회원가입과 로그인 최종 정리
이상입니다.
감사합니다.
'안드로이드' 카테고리의 다른 글
안드로이드 코틀린으로 Volley 라이브러리 사용방법! (0) | 2018.04.05 |
---|---|
안드로이드 코틀린으로 개발 시 "Unresolved reference:java" 해결방법! (1) | 2018.04.03 |
안드로이드 코틀린에 setOnClickListener 사용방법! (0) | 2018.03.30 |
안드로이드 코틀린으로 데이터바인딩 하는 방법! Android DataBinding with Kotlin (0) | 2018.03.29 |
안드로이드 Toast custom 커스텀 토스트메시지 만들기! (0) | 2018.03.29 |