Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java toJson(obj)本地类_Java - Fatal编程技术网

Java toJson(obj)本地类

Java toJson(obj)本地类,java,Java,为什么我这样做时gson.toJson(obj)返回null public class LoginServlet extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { UserService userService = UserServiceFactory.getUserServ

为什么我这样做时
gson.toJson(obj)
返回
null

public class LoginServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();
        Gson gson = new Gson();

        if (user != null) {
            resp.setContentType("application/json");
            resp.getWriter().println(gson.toJson(user));
        } else {
            class Url {
                private String url;
                Url(String url) {
                    this.url=url;
                }
            }
            Url obj = new Url(userService.createLoginURL(req.getRequestURI()));
            resp.setContentType("application/json");
            resp.getWriter().println(gson.toJson(obj));
        }
    }
}
当我在
LoginServlet
类之外定义
Url
类时,它会工作并返回Url对象的json字符串

class Url {
    private String url;
    Url(String url) {
        this.url=url;
    }
}

public class LoginServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();
        Gson gson = new Gson();

        if (user != null) {
            resp.setContentType("application/json");
            resp.getWriter().println(gson.toJson(user));
        } else {
            Url obj = new Url(userService.createLoginURL(req.getRequestURI()));
            resp.setContentType("application/json");
            resp.getWriter().println(gson.toJson(obj));
        }
    }
}

我想我还是不确定你的实际问题是…我不能让Gson给我一个空值

import com.google.gson.Gson;

public class GsonUrlParse {

    public static void main( String[] args ) {
        Url url = new Url( "foo" );
        System.out.println( new Gson().toJson( url ) );
        Url nurl = new Url( null );
        System.out.println( new Gson().toJson( nurl ) );
    }
}

class Url {
    String url;
    public Url( String url ) {
        this.url = url;
    }
}
输出:

{“url”:“foo”}


{}

您是否验证了
Url obj=…
导致gson需要解析的内容?是的,它确实包含一个Url对象?根据您应该使用的,看起来像
gson.toJson(obj,resp.getWriter())等待,那么当Url定义不在LoginServlet定义外部时,它在哪里?请参见“新建编辑”,我这样编译它。尝试将class
Url
放在class
GsonUrlParse
内部,如上面的示例所示。@GertCuykens-Huh,好的,是的。就其本身而言,我没有答案,但我确实有一个猜测:因为这个类是一个“本地类”,所以括号外的任何东西都不知道它是什么——包括Gson。如果你把它定义为一个内部类,它应该可以工作。是的,但是我发现很难相信没有办法用不同的方式定义一个本地类,这样Gson就可以找到一个本地类,可能有一个我不知道的注释或者什么?