Что такое строгость в 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)