android - 关于android服务器错误500

标签 android json android-volley internal-server-error

我正在尝试向部署在 glass fish 服务器中的 Web 应用程序 servlet 发送请求,并使用 volley HTTP 库接收 json 响应。我设法从几个 servlet 获得了响应,但是对于一个 servlet,我收到了错误 BasicNetwork.performRequest: Unexpected response code 500 。我尝试切换 HTTP 方法,在 servlet 中将内容类型设置为“application/json”并实现 getHeaders() 方法,并且可能在 SO 中给出了关于此问题的解决方案。但是我还不能解决这个问题。

我的 Volley 请求如下:

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.i("RESPONSE",response.toString());
                //Type type = new TypeToken<CartItem>() {}.getType();
                //CartItem item = new Gson().fromJson(response.toString(), type);
                //cartItem = item;
            }
        }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.i("Volley_error", error.toString());
    }
});

我在浏览器中的 json 响应如下所示:

{
    "items": [{
        "p_id": 1,
        "p_name": "Multi Checked Shirt",
        "p_price": 1234.0,
        "p_size": "M",
        "p_img": "uploads/products/Dorothy-Perkins-Multi-Checked-Shirt-4510-9254471-1-pdp_slider_l.jpg",
        "p_qnty": 1
    }, {
        "p_id": 15,
        "p_name": "Rust Solid Coloured Pant",
        "p_price": 3500.0,
        "p_size": "S",
        "p_img": "uploads/products/Dorothy-Perkins-Rust-Solid-Coloured-Pant-971120977.jpg",
        "p_qnty": 2
    }],
    "cart_total": 8234.0,
    "total_items": 3
}

我的 Servlet 代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (request.getSession(false).getAttribute("cart") != null) {

        ShoppingCart cart = (ShoppingCart) request.getSession(false).getAttribute("cart");
        List<CartItem> cartItems = cart.getShoppingList();
        List<Double> tot = new ArrayList<>();
        CartModel model = new CartModel();
        List<CartItemModel> cartItemModels = new ArrayList<>();
        for (CartItem item : cartItems) {

            CartItemModel itemModel = new CartItemModel(item.getProduct_id(),
                    cart.getNameofProduct(item.getProduct_id()),
                    cart.getPriceofProduct(item.getProduct_id(), item.getSize()),
                    item.getSize(),
                    path + cart.getImageofProduct(item.getProduct_id()),
                    item.getQnty());
            cartItemModels.add(itemModel);
            tot.add(cart.getPriceofProduct(item.getProduct_id(), item.getSize()) * item.getQnty());

        }
        model.setCart_total(cart.grandTotal(tot));
        model.setTotal_items(cart.getTotalItemsOfTheCart());
        model.setItems(cartItemModels);
        Type type = new TypeToken<CartModel>() {
        }.getType();
        String element = new Gson().toJson(model, type);
        response.getWriter().write(element);
    }
}

我知道修改 Volley 库代码不是一个好主意,但我也试过了。

if (statusCode < 200 || statusCode > 299) { throw new IOException();}

if (statusCode < 200 || statusCode > 505) {throw new IOException();}

然后我得到了错误:

JSONException: Value <!DOCTYPE of type java.lang cannot be converted to JSONObject

我是安卓新手。任何帮助将不胜感激。谢谢。

更新:

这是我使用 HttpRequester 访问 url 时的方式:

enter image description here

最佳答案

基于

JSONException: Value <!DOCTYPE

您的 servlet 正在返回 HTML,而不是纯文本 JSON,因此无法对其进行解析。

由于您收到 500 内部服务器错误,因此 HTML 内容是此处的真实 错误。如果您从浏览器或使用 Postman 等工具访问该 URL,您将能够看到您的 servlet 的堆栈跟踪。

修复该问题后,您可能希望在请求或响应中将 Content-Type 的 header 设置为 application/json 以强制写入 json。

有关解决方案的完整详细信息,请参阅 How to send JSON back with Java

关于android - 关于android服务器错误500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35748691/

相关文章:

android - 在没有网络请求的情况下显示 NetworkImageView 的默认图像

android - 交换机错误代码

android - Ruby on Rails REST API 与可离线工作的 Android 客户端

android - 找不到react-native-gesture-handler模​​ block

javascript - 按 cookie 中的数据对 JSON 响应进行排序

android - Android Volley有时会导致两次POST

java - 将事件添加到 "Material-Calendar-View"插件的日历时出现问题

android - 使用 XML(Android API 级别 23)在警报对话框中设置消息文本外观

javascript - Maerionette 给出 ReferenceError : menuGroup is not defined

jquery - Grails JQuery Ajax 表单验证