简体   繁体   English

关于android服务器错误500

[英]Regarding android server error 500

I am trying to send request to my my web application servlet deployed in glass fish sever and receive json response using volley HTTP library. 我正在尝试向我在玻璃鱼服务器中部署的Web应用程序servlet发送请求,并使用volley HTTP库接收json响应。 I managed to get the response from several servlets but but with one servlet I m getting error BasicNetwork.performRequest: Unexpected response code 500 . 我设法从几个servlet获得响应,但是有一个servlet我得到错误BasicNetwork.performRequest:意外的响应代码500 I tried with switching HTTP methods, setting content type as "application/json" in servlet and implement the getHeaders() method and may solutions given in SO regarding this issue. 我尝试切换HTTP方法,在servlet中将内容类型设置为“application / json”并实现getHeaders()方法,并且可以在SO中给出关于此问题的解决方案。 But I couldnt solve this problem yet. 但我还是无法解决这个问题。

My Volley request is given below : 我的排球请求如下:

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());
    }
});

My json response in the browser looks like below : 我在浏览器中的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
}

My Servlet code : 我的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);
    }
}

I know it is not a good idea to modify the Volley library code but I tried that too. 我知道修改Volley库代码并不是一个好主意,但我也尝试过。

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

to

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

Then I got Error : 然后我得到错误:

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

I am new to android . 我是android的新手。 Any help would be appreciable. 任何帮助都会很明显。 Thank you. 谢谢。

UPDATE : 更新:

Here is how when I access url with HttpRequester : 以下是我使用HttpRequester访问url的方法:

在此输入图像描述

Based on 基于

JSONException: Value <!DOCTYPE JSONException:Value <!DOCTYPE

Your servlet is returning HTML, not plaintext JSON, so it can't be parsed. 您的servlet返回HTML,而不是纯文本JSON,因此无法解析。

Since you are getting a 500 Internal server error, that HTML content is the real error here. 由于您收到500内部服务器错误,因此HTML内容是真正的错误。 If you access that URL from your browser, or using a tool such as Postman, you'll be able to see the stacktrace of your servlet. 如果您从浏览器访问该URL,或使用Postman等工具,您将能够看到servlet的堆栈跟踪。

Once you fix that, you may want to set the header for Content-Type to application/json in either the request or response to force json to be written. 解决之后,您可能希望在请求或响应中将Content-Type的头设置为application / json以强制写入json。

For full details of a solution, see How to send JSON back with Java 有关解决方案的完整详细信息,请参阅如何使用Java发送JSON

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM