java - org.json JSONObject 在从 Spring Boot Controller 返回时向 JSONObject 添加额外的对象

标签 java spring-boot org.json

我正在从 Spring Boot Controller (1.5.16.RELEASE) 返回 org.json JSONObject。我在其中获得了一个额外的 map 对象。

我的代码-

@GetMapping(value = Constants.API_LOGIN)
    public Object login(@RequestParam String userName, @RequestParam String password) throws JSONException  {

        UserAuth userAuth = new UserAuth();
        UserAuth user = null;

        try {
            Preconditions.checkArgument(!Strings.isNullOrEmpty(userName), "empty UserName");
            Preconditions.checkArgument(!Strings.isNullOrEmpty(password), "empty password");

            userAuth.setUserName(userName);
            userAuth.setPassword(password);
            user = authService.checkAuth(userAuth);

        } catch (IllegalArgumentException ex) {
            ex.printStackTrace();
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
        }

        JSONObject json = new JSONObject();

        if (user != null) {
            json.put("status", true);
            json.put("message", "login success");
            return ResponseEntity.status(HttpStatus.OK).body(json);
        } else {
            json.put("status", false);
            json.put("message", "username or password doesnt match");
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(json);
        }
    }

pom.xml

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180813</version>
</dependency>

预期 Json

 {
        "message": "login success",
        "status": true
 }

我正在获取 JSON

{
    "map": {
        "message": "login success",
        "status": true
    }
}

我不知道为什么我在 JSONObject 中得到额外的 map 对象。

最佳答案

我认为问题在于默认的 Springboot JSON 序列化器是 Jackson,它不知道如何处理 JSONObject所以它把它包装成 Map<String, Object>其中关键是 map该值是您的 JSONObject 。 在你的情况下,只使用 map 会简单得多:

@GetMapping(value = Constants.API_LOGIN)
public ResponseEntity<Object> login(@RequestParam String userName, @RequestParam String password) throws JSONException  {
    .....
    Map<String, Object> json = new HashMap<>();
    json.put("status", true);
    json.put("message", "login success");
    return ResponseEntity.status(HttpStatus.OK).body(json);
}

或者我猜另一种解决方案是简单地返回一个字符串棒 json.toString在体内

@GetMapping(value = Constants.API_LOGIN)
public String login(@RequestParam String userName, @RequestParam String password) throws JSONException  {
    ....
    JSONObject json = new JSONObject();
    json.put("status", true);
    json.put("message", "login success");
    return ResponseEntity.status(HttpStatus.OK).body(json.toString());
}

关于java - org.json JSONObject 在从 Spring Boot Controller 返回时向 JSONObject 添加额外的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52774735/

相关文章:

java - 自动委托(delegate) java 类的所有方法

java - 在对话框中将字符串转换为 double

Java通过反射创建枚举实例

java - Digital Ocean为spring boot应用开放8080端口

java - 避免在 Java 中使用相同的 try catch block

java - 找不到 org.json.JSONObject

java - 如何在Spring Boot中默认阻止@PathVariable值的解码

java - Spring Boot 路径变量旁边的精确逗号

eclipse - Eclipse Gradle Spring Boot MVC构建无法识别JSP

java - 如何在不多次调用 .getJSONObject(key) 的情况下检查 JSONObject 中是否存在属性?