Что такое строгость в android и его использование

Я новичок в android, я следую этому руководству, я нашел код ниже, там он преобразует строку json в StringEntity. исправьте меня, если я ошибаюсь. StringEntity используется для передачи данных, Заголовки, такие как Accept, Content-type to Server.

            // 1. create HttpClient
        HttpClient httpclient = new DefaultHttpClient();

        // 2. make POST request to the given URL
        HttpPost httpPost = new HttpPost(url);



        String json = "";

        // 3. build jsonObject
        JSONObject jsonObject = new JSONObject();
        jsonObject.accumulate("name", person.getName());
        jsonObject.accumulate("country", person.getCountry());
        jsonObject.accumulate("twitter", person.getTwitter());

        // 4. convert JSONObject to JSON to String
        json = jsonObject.toString();

        // ** Alternative way to convert Person object to JSON string usin Jackson Lib
        // ObjectMapper mapper = new ObjectMapper();
        // json = mapper.writeValueAsString(person);

        // 5. set json to StringEntity
        StringEntity se = new StringEntity(json);

        // 6. set httpPost Entity
        httpPost.setEntity(se);

        // 7. Set some headers to inform server about the type of the content   
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-type", "application/json");

        // 8. Execute POST request to the given URL
        HttpResponse httpResponse = httpclient.execute(httpPost);

        // 9. receive response as inputStream
        inputStream = httpResponse.getEntity().getContent();
.
.
.

и как я могу получить данные в servlet/jsp? Должен ли я использовать getStream() или request.getParameter()

Ответ 1

Объект, содержимое которого извлекается из строки.

StringEntity - это необработанные данные, которые вы отправляете в запросе.

Сервер обменивается данными с помощью JSON, строка JSON может быть отправлена ​​через StringEntity, и сервер может получить ее в теле запроса, проанализировать и сгенерировать соответствующий ответ.

мы устанавливаем весь наш стиль юникода, тип содержимого только в этом

StringEntity se = new StringEntity(str,"UTF-8");
    se.setContentType("application/json");
    httpPost.setEntity(se); 

Для получения дополнительной информации вы можете обратиться к этой ссылке http://developer.android.com/reference/org/apache/http/entity/StringEntity.html

В соответствии с вашим требованием я редактирую это для метода post

HttpPost httpPost = new HttpPost(url_src);
HttpParams httpParameters = new BasicHttpParams();
httpclient.setParams(httpParameters);
StringEntity se = new StringEntity(str,"UTF-8");
se.setContentType("application/json");
httpPost.setEntity(se); 



try
{
    response = httpclient.execute(httpPost);

    StatusLine statusLine = response.getStatusLine();
    int statusCode = statusLine.getStatusCode();


    if(statusCode==200)
    {
        entity = response.getEntity();
        String responseText = EntityUtils.toString(entity);
        System.out.println("The response is" + responseText);   

    }
    else
    {
        System.out.println("error");;
    }
}
catch(Exception e)
{

    e.printStackTrace();

}

Ответ 2

StringEntity - это необработанные данные, которые вы отправляете в запросе.

Большая часть взаимодействия с сервером с использованием JSON, строка JSON может быть отправлена ​​через StringEntity, а сервер может получить ее в теле запроса, проанализировать и сгенерировать соответствующий ответ.

Accept, Content-type и т.д. отправляются как заголовок запроса, но StringEntity является его содержимым.

Заголовок не передается в StringEntity.

Ответ 3

У меня была та же самая проблема, которую я решил в 3 шагах с Джексоном в Netbeans/Glashfish btw.

1) Требования:

некоторые из ящиков, которые я использовал:

 commons-codec-1.10.jar
 commons-logging-1.2.jar
 log4j-1.2.17.jar
 httpcore-4.4.4.jar
 jackson-jaxrs-json-provider-2.6.4.jar
 avalon-logkit-2.2.1.jar
 javax.servlet-api-4.0.0-b01.jar
 httpclient-4.5.1.jar
 jackson-jaxrs-json-provider-2.6.4.jar
 jackson-databind-2.7.0-rc1.jar
 jackson-annotations-2.7.0-rc1.jar
 jackson-core-2.7.0-rc1.jar

Если я пропустил какую-либо из банок выше, вы можете скачать с Maven здесь http://mvnrepository.com/artifact/com.fasterxml.jackson.core

2) Пример: Java-класс, куда вы отправляете сообщение. Сначала конвертируйте с Джексоном пользователя Entity в Json, а затем отправьте его в свой класс отдыха.

import com.fasterxml.jackson.databind.ObjectMapper;
import ht.gouv.mtptc.siiv.model.seguridad.Usuario;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.simple.JSONObject;


public class PostRest {


    public static void main(String args[]) throws UnsupportedEncodingException, IOException {

         // 1. create HttpClient
        DefaultHttpClient httpclient = new DefaultHttpClient();

        // 2. make POST request to the given URL
        HttpPost httpPost 
        = new HttpPost("http://localhost:8083/i360/rest/seguridad/obtenerEntidad");


        String json = "";
        Usuario u = new Usuario();
        u.setId(99L);

        // 3. build jsonObject
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("id", u.getId());

        // 4. convert JSONObject to JSON to String
        //json = jsonObject.toString();

        // ** Alternative way to convert Person object to JSON string usin Jackson Lib
         //ObjectMapper mapper = new ObjectMapper();
         //json = mapper.writeValueAsString(person);
        ObjectMapper mapper = new ObjectMapper();
       json = mapper.writeValueAsString(u);

        // 5. set json to StringEntity
        StringEntity se = new StringEntity(json,"UTF-8");


        // 6. set httpPost Entity
        httpPost.setEntity(se);

        // 7. Set some headers to inform server about the type of the content   
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-type", "application/json");

        // 8. Execute POST request to the given URL
        HttpResponse httpResponse = httpclient.execute(httpPost);

        // 9. receive response as inputStream
        //inputStream = httpResponse.getEntity().getContent();

}


}

3) Пример: Java Class Rest, где вы хотите получить Entity JPA/Hibernate. Здесь с вашим MediaType.APPLICATION_JSON) вы получаете объект следующим образом:

"Идентификатор": 99, "usuarioPadre": нулевой, "прозвище": нулевой, "клаве": нулевой, "Nombre": NULL, "apellidos": нулевой, "isLoginWeb": нулевой, "isLoginMovil": нулевой, "Estado": нулевой, "correoElectronico": нулевой, "imagePerfil": нулевой, "Perfil": нулевой, "urlCambioClave": нулевой, "Telefono": нулевой, "Celular": нулевая "isFree": нулевой, "proyectoUsuarioList": нулевой, "cuentaActiva": нулевой, "keyUser": нулевой, "isCambiaPassword": нулевой, "videoList": нулевой, "idSocial": нулевой, "tipoSocial": нулевой, "idPlanActivo": нулевой, "cantidadMbContratado": нулевой, "cantidadMbConsumido": нулевой, "cuotaMb": нулевой, "fechaInicio": нулевой, "fechaFin": нулевая}"

    import javax.ws.rs.Consumes;
    import javax.ws.rs.GET;
    import javax.ws.rs.POST;

    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    import org.json.simple.JSONArray;

    import org.json.simple.JSONObject;
    import org.apache.log4j.Logger;

    @Path("/seguridad")
    public class SeguridadRest implements Serializable {



       @POST
        @Path("obtenerEntidad")
        @Consumes(MediaType.APPLICATION_JSON)
        public JSONArray obtenerEntidad(Usuario u) {
            JSONArray array = new JSONArray();
            LOG.fatal(">>>Finally this is my entity(JPA/Hibernate) which 
will print the ID 99 as showed above :" + u.toString());
            return array;//this is empty

        }
       ..

Некоторые советы. Если у вас возникли проблемы с запуском сети после использования этого кода, возможно, из-за @Consumes in XML... вы должны установить его как @Consumes(MediaType.APPLICATION_JSON)