【问题标题】:Creat a JSONObject : Spring boot创建 JSON 对象:Spring Boot
【发布时间】:2021-07-16 03:40:02
【问题描述】:

我想创建一个JSONObject

@RequestMapping(value = "/test", method = RequestMethod.GET)
@ResponseBody 
  public JSONObject  Test() {

 JSONObject test = new JSONObject();
 test.put("name","caroline");
 return test;
}

结果给了我:

{"map":{"name":"caroline"}} 

但我一直在等待这样的事情:

{"name":"caroline"}

不知道问题出在哪里,我就关注了this exemple

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    你可以通过创建一个类来做到这一点

    class MyResponseClass {
    
      private String name;
        
      public MyResponseClass(String name) {
        this.name = name;
      }
        
      public String getName() {
        return name;
      }
        
      public void setName(String name) {
        this.name = name;
      }
    }
    

    首字母:

    
    @RestController
    class MyController {
    
       @GetMapping("/test")
       public MyResponseClass getMyResponseClass() {
       final MyResponseClass test = new MyResponseClass("caroline");
       return test;
       }
    }
    
    

    我建议你阅读这篇文章:Building an Application with Spring Boot

    【讨论】:

    【解决方案2】:

    我使用示例 Spring Boot 项目尝试使用您的代码,但出现错误,

    No converter for [class org.json.JSONObject]
    

    这个错误的原因已经解释清楚了here。重申答案,JSONObject 类没有 getter,因此没有错误。默认情况下,spring-boot starter web 依赖具有 Jackson web 支持,可以将任何 POJO 类转换为 JSON 对象。因此,@süleyman-can 使用 POJO 的答案是处理此问题的正确方法。

    在这种情况下,您不能使用 POJO 类,因为响应中的字段对于每个请求都是不同的。例如,您必须发送

    {"a": "b"}
    

    对于一个响应和

    {"c": "d"}
    

    对于另一个响应,您始终可以像这样使用 Map

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ResponseBody
    public Map<String, String> test() {
      Map<String, String> test = new HashMap<>();
      test.put("name","caroline");
      return test;
    }
    

    响应会是这样的,

    {"name":"caroline"}                                                                                                                      
    

    【讨论】:

    【解决方案3】:

    希望你说的是org.json

    如果你真的想使用 JSONObject 来创建你的 JSON,那么下面的代码就可以了。只是您可以将返回类型从 JSONObject 更改为 String。

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ResponseBody
    public String  Test() {
        JSONObject test = new JSONObject();
        test.put("name","caroline");
        return test.toString();
    }
    

    【讨论】:

    • 是的,我正在使用 org.json 包,你可以在这里找到我真正的问题,gis.stackexchange.com/questions/394460/…
    • 如果我执行“test.toString();”在我的情况下,我的 geojson 将不正确,它会给我一些看起来不像 geojson 的东西
    【解决方案4】:

    你可以试试这个

    1- 在 pom.xml 中添加这个依赖

    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.1</version>
    </dependency>
    

    2-例如我有这个类

    public class Car {
    
    private String color;
    private String type;
    
    // standard getters setters
    

    }

    2- Java 对象到 JSON

    ObjectMapper objectMapper = new ObjectMapper();
    Car car = new Car("yellow", "renault");
    objectMapper.writeValue(new File("target/car.json"), car);
    

    必须得到喜欢的结果:

    {"color":"yellow","type":"renault"}
    

    3- JSON 到 Java 对象

    String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
    Car car = objectMapper.readValue(json, Car.class);
    

    【讨论】:

    • 你可以在这里找到我真正的问题,你能看看吗:gis.stackexchange.com/questions/394460/…
    • 我遇到了这样的问题,但不是同一个话题,事实上,我努力通过替换功能解决它如果找不到解决你的问题你可以试试这个方法祝你好运@工作
    猜你喜欢
    • 2016-06-21
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多