Ошибка установки выражения X со значением [Ljava.lang.String;@]

Я получаю иногда, а иногда и не странную ошибку:

Error setting expression X with value [Ljava.lang.String;@......]

Иногда это происходит, а иногда нет. Это тихо раздражает. Ошибка иногда исходит от этого класса:

package com.coreRestaurant.menuItem;

import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class MenuItemAction extends ActionSupport implements ModelDriven<MenuItem>{

    private MenuItem menuItem = new MenuItem();
    private final String DATABASE_PROBLEMS = "Error code : Database problems";
    private String json;

    public String execute(){
        MenuItemService itemService = new MenuItemService();
        if(itemService.testDatabaseConnectionU()){
        setJson(new Gson().toJson(itemService.getMenuItemsByMenuId(menuItem.getMenuId()) ));
        }else{
            setErrorToBeSentBackToClientSide(DATABASE_PROBLEMS);
        }
        return SUCCESS;
    }

    @Override
    public MenuItem getModel() {
        return menuItem;
    }

    public String getJson() {
        return json;
    }

    public void setJson(String json) {
        this.json = json;
    }

    private void setErrorToBeSentBackToClientSide(String error){

        String errorCode = error;
        setJson(new Gson().toJson(errorCode));

    }
}

А потом MenuItem класс:

package com.coreRestaurant.menuItem;

public class MenuItem {

    private String name;
    private double price;
    private int menuId;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public int getMenuId() {
        return menuId;
    }
    public void setMenuId(int menuId) {
        this.menuId = menuId;
    }
    public void setMenuId(MenuItem fromJson) {
        setName(fromJson.getName());
        setPrice(fromJson.getPrice());

    }
}

И я вызываю эти вещи из файла PHP (две строки делают это, но вторая вызывает беспокойство):

 $specificMenuJson = file_get_contents('http://localhost:8080/Core/read?id=' . $menuId);
 $specificMenuItemsJson = file_get_contents('http://localhost:8080/Core/readMenuItemById?menuId=' . $menuId);

У него проблема с установкой значения menuId, но у меня есть геттеры и сеттеры. Не знаю, почему иногда это не удается. Какие-либо предложения?


person user4080732    schedule 04.11.2014    source источник


Ответы (2)


Попробуйте изменить название метода setMenuId

public void fromJsonMenuId(MenuItem fromJson) {
    setName(fromJson.getName());
    setPrice(fromJson.getPrice());
}
person Roman C    schedule 05.11.2014

Проблема в:

Когда управляемый моделью Interceptor вызывает метод setMenuId(int menuId), он передает строковое значение в аргумент int menuId. Поскольку перехватчик не выполняет неявного преобразования из String в int

person AsSiDe    schedule 04.11.2014
comment
уверены ли вы? потому что первый вызывает не класс MenuItemAction, а класс MenuAction, который здесь не включен. Оба они вызывают разные классы действий. - person user4080732; 05.11.2014
comment
хорошо, я проверю это. Но это все равно странно, потому что в большинстве случаев он работал (по крайней мере, на локальном хосте) и там он передавал строку в int. Не знаю, зачем он это делает, но я пробую моддинг и вижу результат. Я дам вам знать, если это сработало. В любом случае спасибо за ваш ответ. - person user4080732; 05.11.2014
comment
хорошо, пробовал, но все равно не работает. Изменил мой menuId на String, но не работает - person user4080732; 05.11.2014
comment
в какой строке вы получаете эту ошибку. Запустите в режиме отладки и предоставьте трассировку стека. - person AsSiDe; 05.11.2014