Spring for Android 探究

Spring for Android是什么?

  • Spring for Android 是一个Spring框架的扩展,目标是简化本地Android应用开发。

  • 特性:
    一、一个针对Android的REST客户端
    二、对于访问安全API的一个认证的支持

Spring for Android能为开发者带来什么?

就笔者而言,目前针对特性一体会到的好处主要有两点:

  • 1、REST客户端调用模板:方便与提供REST服务的服务端进行交互。

  • 2、JSON&XML解析:目前,客户端与服务端进行数据交换的格式基本全部采用JSON或XML,Spring for Android可以方便的进行JSON或XML数据的解析。

代码示例

......

    private class DownloadStateTask extends AsyncTask<MediaType, Void, State> {

        private String abbreviation;

        @Override
        protected void onPreExecute() {
            showLoadingProgressDialog();

            // retrieve the abbreviation from the EditText field
            EditText editText = (EditText) findViewById(R.id.edit_text_abbreviation);

            abbreviation = editText.getText().toString();
        }

        @Override
        protected State doInBackground(MediaType... params) {
            try {
                if (params.length <= 0) {
                    return null;
                }

                MediaType mediaType = params[0];

                // The URL for making the GET request
                final String url = getString(R.string.base_uri) + "/state/{abbreviation}";

                // Set the Accept header for "application/json" or "application/xml"
                HttpHeaders requestHeaders = new HttpHeaders();
                List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
                acceptableMediaTypes.add(mediaType);
                requestHeaders.setAccept(acceptableMediaTypes);

                // Populate the headers in an HttpEntity object to use for the request
                HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

                // Create a new RestTemplate instance
                RestTemplate restTemplate = new RestTemplate();
                if (mediaType.equals(MediaType.APPLICATION_JSON)) {
                    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
                } else if (mediaType.equals(MediaType.APPLICATION_XML)) {
                    restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter());
                }

                // Perform the HTTP GET request
                ResponseEntity<State> responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity,
                        State.class, abbreviation);

                // Return the state from the ResponseEntity
                return responseEntity.getBody();
            } catch (Exception e) {
                Log.e(TAG, e.getMessage(), e);
            }

            return null;
        }

        @Override
        protected void onPostExecute(State state) {
            dismissProgressDialog();
            showState(state);
        }

    }
  • RestTemplate类是Spring for Android RestTemplate库的核心。从概念上来说,它类似于其他Spring项目中的模板类。RestTemplate的行为是通过提供回调方法并配置HttpMessageConverter(用于将对象序列化为HTTP请求体以及将响应反序列化为对象)来定制的。在创建新的RestTemplate实例时,构造方法会创建出几个支持对象来实现RestTemplate的功能。

  • 对象到JSON的序列化:在Spring for Android RestTemplate中,对象到JSON的序列化需要使用第三方的JSON映射库。Spring for Android支持两个库,一个是Jackson JSON Processor,另一个是Google Gson。虽然Jackson是个众所周知的JSON解析库,但Gson库却更小,这样在打包时Android应用的体积就会更小。
    代码示例如下:

利用Jackson库:

restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

利用Gson库:

restTemplate.getMessageConverters().add(new GsonHttpMessageConverter());
  • 对象到XML的序列化也需要使用第三方的XML映射库。Simple XML serializer用于提供该序列化功能。 代码示例如下:
restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter());

猜你喜欢

转载自xuantan.iteye.com/blog/1811233