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定义外部时,它在哪里?请参见“新建编辑”,我这样编译它。尝试将classUrl
放在classGsonUrlParse
内部,如上面的示例所示。@GertCuykens-Huh,好的,是的。就其本身而言,我没有答案,但我确实有一个猜测:因为这个类是一个“本地类”,所以括号外的任何东西都不知道它是什么——包括Gson。如果你把它定义为一个内部类,它应该可以工作。是的,但是我发现很难相信没有办法用不同的方式定义一个本地类,这样Gson就可以找到一个本地类,可能有一个我不知道的注释或者什么?