![](/img/trans.png)
[英]How to Embed and Bind JSON Data to HTML Template in Java Web Service
[英]My Java web Service returns a JSON String wrapped in html, how can i remove the HTML
我已經看到過類似的問題,但是在PHP和C#中,我的問題是我是java網絡服務的新手,我們正在使用GSON對結果進行序列化,結果在ArrayList中,我的問題是我的android代碼中的響應獲取了GSON,但包裝在HTML中,因此Gson()。fromJSon給出了錯誤。 我需要刪除HTML
這是我的代碼,請幫忙。
@WebService()
public class Oracle_conexion {
private static final String driver = "oracle.jdbc.driver.OracleDriver";
private static final String database = "jdbc:oracle:thin:@XXX.xxxx.XX:1521:XE";
private static final String usuario = "web";
private static final String password = "prueba";
private static String resultado;
@WebMethod(operationName = "getListaClientes")
public static String getListaClientes() throws SQLException {
List<Cliente> listaClientes = new ArrayList<Cliente>();
Connection conn = null;
PreparedStatement preparedStatement = null;
String query = "SELECT * FROM xxxx.CLIENTES";
try {
conn = conexionbd();
preparedStatement = conn.prepareStatement(query);
ResultSet rs = preparedStatement.executeQuery();
// Recorre el cursor
while (rs.next()) {
Cliente cliente = new Cliente();
cliente.setNombre(rs.getString("NOMBRE"));
cliente.setCodCliente(rs.getInt("CODIGO"));
cliente.setCodComp(rs.getString("ORG"));
listaClientes.add(cliente);
}// while
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
if (preparedStatement != null)
preparedStatement.close();
if (conn != null)
conn.close();
}
JsonArray jsonarray = null;
String json = "";
try {
if (listaClientes != null) {
// json = new Gson().toJson(listaClientes);
/*
* Gson g = new Gson(); Type type = new
* TypeToken<ArrayList<Cliente>>(){}.getType(); json =
* g.toJson(listaClientes, type);
*/
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(listaClientes,
new TypeToken<List<Cliente>>() {
}.getType());
jsonarray = element.getAsJsonArray();
/*
* JsonObject jo = new JsonObject(); jo.add("j", new
* JsonArray());
*/
// Gson gson = new GsonBuilder().create();
// jsonarray = gson.toJsonTree(listaClientes).getAsJsonArray();
// json = new Gson().toJson(listaClientes);
}
} catch (Exception e) {
System.out.println(e.getCause().getMessage());
}
// return listaClientes.toString();
return jsonarray.toString();
}
這是我的android代碼
public class CallSoap {
public String getListaCliente(){
//ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();
String SOAP_ACTION = "http://oraclecon.com/getListaClientes";
String OPERATION_NAME = "getListaClientes";
String WSDL_TARGET_NAMESPACE = "http://oraclecon.com";
String SOAP_ADDRESS="http://XXX.xxxx.XX:8088/OracleEclipWS/services/Oracle_conexion?wsdl";
// Modelo el request
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = false;
envelope.setOutputSoapObject(request);
String response=null;
//Para acceder al WS se crea un objeto de tipo HttpTransportSE , esto es propio de la libreria KSoap
try {
// Modelo el transporte
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
//httpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
httpTransport.debug = true;
//Llamado al servicio web . Son el nombre del SoapAction, que se encuentra en la documentacion del servicio web y el objeto envelope
httpTransport.call(SOAP_ACTION, envelope);
/*HttpClient hc = new DefaultHttpClient();
HttpGet get = new HttpGet(SOAP_ADDRESS);
HttpResponse rp = hc.execute(get);
HttpEntity entity = rp.getEntity();
response = rp.toString();*/
//Respuesta del Servicio web
response = httpTransport.responseDump;
/*for (int i=0;i<inpList.size();i++) {
Cliente x = inpList.get(i);
//System.out.println(x);
}*/
/*Gson gson = new GsonBuilder().create();
TypeToken<List<Cliente>> token = new TypeToken<List<Cliente>>(){};
List<Cliente> cli = gson.fromJson(response, token.getType());
listaClientes = (ArrayList<Cliente>) cli;*/
}catch (Exception ex){
response=ex.getMessage();
}
return response;
}
這是我在mainactivity中的測試應用程序中的異步代碼
public class MainActivity extends Activity {
public class AsyncCallSoapListaCli extends AsyncTask<String, Void, String> {
// private final ProgressDialog dialog = new
// ProgressDialog(MainActivity.this);
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
CallSoap CS = new CallSoap();
String response = CS.getListaCliente();
return response;
}
@SuppressWarnings("unchecked")
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Gson gson = new Gson();
/*
* Cliente[] listaCli = gson.fromJson(result, Cliente[].class);
* List<Cliente> list = Arrays.asList(listaCli); list = new
* ArrayList(list);
*/
txtCodigo.setText(result);
// dialog.dismiss();
// ArrayList<Cliente> inpList = new ArrayList<Cliente>();
// Type type = new TypeToken<ArrayList<Cliente>>(){}.getType();
List<Cliente> inpList2 = (List<Cliente>) new Gson().fromJson(
result, Cliente.class);
/*
* Gson gson = new GsonBuilder().create(); Map<String, Cliente>
* gsonResponse; //TypeToken<List<Cliente>> token = new
* TypeToken<List<Cliente>>(){}; Type collectionType = new
* TypeToken<Map<String, Cliente>>(){}.getType(); gsonResponse =
* gson.fromJson(result, collectionType); List<Cliente> cli =
* gson.fromJson(result, collectionType); listCli =
* (ArrayList<Cliente>) cli; textClientes.setText(result);
*/
textClientes.setText(inpList2.get(0).getNombre());
}
}
如果問題僅在於處理包裝在HTML中的GSON,則在發送到Gson()。fromJson()之前,您可以很好地處理響應字符串(除去HTML標簽)。 您可以制作一個實現** Html.TagHandler **接口的通用類,並在那里處理HTML標記,然后按以下方式使用它
txtCodigo.setText(Html.fromHtml(result, null, new MyTagHandler()));// where MyTagHandler implements Html.TagHandler
您可以參考本教程的實現。
jsut將此添加到您的代碼中:
response.getWriter().Write(new Gson().toJson(jsonarray));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.