gpt4 book ai didi

java - Gson - 尝试将 json 字符串转换为自定义对象

转载 作者:行者123 更新时间:2023-11-29 07:20:41 25 4
gpt4 key购买 nike

这是我从服务器返回的Json

{"ErrorCode":1005,"Message":"Username does not exist"}

这是我的错误类

public class ErrorModel {
public int ErrorCode;
public String Message;
}

这是我的转换代码。

public static ErrorModel GetError(String json) {

Gson gson = new Gson();

try
{
ErrorModel err = gson.fromJson(json, ErrorModel.class);

return err;
}
catch(JsonSyntaxException ex)
{
return null;
}
}

它总是抛出 JsonSyntaxException。有什么想法可能是我的问题吗?

编辑:根据要求,这里有进一步的阐述。

我的后端是一个充当休息 API 的 ASP.NET MVC 2 应用程序。后端不是这里的问题,因为我的操作(甚至服务器错误)都返回 Json(使用内置的 JsonResult)。这是一个示例。

[HttpPost]
public JsonResult Authenticate(AuthenticateRequest request)
{
var authResult = mobileService.Authenticate(request.Username, request.Password, request.AdminPassword);

switch (authResult.Result)
{
//logic omitted for clarity
default:
return ExceptionResult(ErrorCode.InvalidCredentials, "Invalid username/password");
break;
}

var user = authResult.User;

string token = SessionHelper.GenerateToken(user.UserId, user.Username);

var result = new AuthenticateResult()
{
Token = token
};

return Json(result, JsonRequestBehavior.DenyGet);
}

基本逻辑是对用户凭据进行身份验证,然后返回 json 形式的 ExceptionModel 或返回 json 形式的 AuthenticationResult。

这是我的服务器端异常模型

public class ExceptionModel
{
public int ErrorCode { get; set; }
public string Message { get; set; }

public ExceptionModel() : this(null)
{

}

public ExceptionModel(Exception exception)
{
ErrorCode = 500;
Message = "An unknown error ocurred";

if (exception != null)
{
if (exception is HttpException)
ErrorCode = ((HttpException)exception).ErrorCode;

Message = exception.Message;
}
}

public ExceptionModel(int errorCode, string message)
{
ErrorCode = errorCode;
Message = message;
}
}

当使用无效凭据调用上述身份验证时,将按预期返回错误结果。返回的Json就是上面问题中的Json。

在 android 端,我首先用我的键值对构建一个对象。

public static HashMap<String, String> GetAuthenticationModel(String username, String password, String adminPassword, String abbr)
{
HashMap<String, String> request = new HashMap<String, String>();
request.put("SiteAbbreviation", abbr);
request.put("Username", username);
request.put("Password", password);
request.put("AdminPassword", adminPassword);

return request;
}

然后,我发送一个 http post 并以字符串形式返回任何发回的内容。

public static String Post(ServiceAction action, Map<String, String> values) throws IOException {
String serviceUrl = GetServiceUrl(action);

URL url = new URL(serviceUrl);

URLConnection connection = url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

String data = GetPairsAsString(values);

DataOutputStream output = new DataOutputStream(connection.getOutputStream());
output.writeBytes(data);
output.flush();
output.close();

DataInputStream input = new DataInputStream(connection.getInputStream());

String line;
String result = "";
while (null != ((line = input.readLine())))
{
result += line;
}
input.close ();

return result;
}

private static String GetServiceUrl(ServiceAction action)
{
return "http://192.168.1.5:33333" + action.toString();
}

private static String GetPairsAsString(Map<String, String> values){

String result = "";
Iterator<Entry<String, String>> iter = values.entrySet().iterator();

while(iter.hasNext()){
Map.Entry<String, String> pairs = (Map.Entry<String, String>)iter.next();

result += "&" + pairs.getKey() + "=" + pairs.getValue();
}

//remove the first &
return result.substring(1);
}

然后我把那个结果传递给我的解析器看它是否是一个错误

public static ErrorModel GetError(String json) {

Gson gson = new Gson();

try
{
ErrorModel err = gson.fromJson(json, ErrorModel.class);

return err;
}
catch(JsonSyntaxException ex)
{
return null;
}
}

但是,总是抛出 JsonSyntaxException。

最佳答案

可能有助于了解有关异常的更多信息,但相同的代码示例在这里工作正常。我怀疑您遗漏了一段导致问题的代码(可能是 JSON 字符串的创建/检索)。这是一个代码示例,它适用于 Java 1.6 和 Gson 1.6:

import com.google.gson.Gson;

public class ErrorModel {
public int ErrorCode;
public String Message;
public static void main(String[] args) {
String json = "{\"ErrorCode\":1005,\"Message\":\"Username does not exist\"}";
Gson gson = new Gson();
ErrorModel err = gson.fromJson(json, ErrorModel.class);
System.out.println(err.ErrorCode);
System.out.println(err.Message);
}
}

关于java - Gson - 尝试将 json 字符串转换为自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com