为了账号安全,请及时绑定邮箱和手机立即绑定

Spring boot,如何从json文件中读取特定对象,我需要什么注释?

Spring boot,如何从json文件中读取特定对象,我需要什么注释?

浮云间 2021-12-01 16:58:09
我正在学习 Spring Boot,我知道如何从资源目录中读取 JSON 文件,但我想获取特定数据,而不是整个数据。像 localhost:8080/user 返回用户名。下面是我当前的代码package com.example;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.*;import org.springframework.boot.autoconfigure.*;import org.springframework.core.io.Resource;import org.springframework.web.bind.annotation.*;@RestController@EnableAutoConfigurationpublic class HelloWorld {    @Value("classpath:json/test.json")    private Resource resourceFile;    @RequestMapping("/")    Resource home() {        return resourceFile;    }    public static void main(String[] args) throws Exception {        SpringApplication.run(HelloWorld.class, args);    }}我想读取 test.json 文件中的特定数据。请给我一些建议或步骤。谢谢
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

与往常一样,有几种可能的方法。


除了手动解析和提取方法(如何在 Spring 中加载资源并将其内容用作字符串),您还可以尝试更高级的方法并使用像 jackson-databind 这样的库(https://github.com/FasterXML /杰克逊数据绑定)。


假设您的资源中有这个 json 对象:


{

  "foo" : {

    "bar" : 42

  }

}

并且 Jackson ObjectMapper 已经注入:


@Autowired

private ObjectMapper objectMapper;

选项 1:对 JsonNode 使用通用方法


    @Autowired

    ObjectMapper objectMapper;


    @RequestMapping("/")

    JsonNode home() throws IOException {

        JsonNode jsonNode = objectMapper.readTree(resourceFile.getFile());

        return jsonNode.get("foo").get("bar");

    }

选项 2:https : //github.com/FasterXML/jackson-databind#1-minute-tutorial-pojos-to-json-and-back


查看完整回答
反对 回复 2021-12-01
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

这只是带有一些建议的@ibexit 答案的变体。


在 ibexit 答案中使用选项 2(使用 pojo),除非您确实需要 JsonNode(您需要 JsonNode 的可能性舍入为 0%)。

创建一个 POJO 将您的 Json 表示为一个对象。请参阅下面的示例。

我建议您使用@JsonIgnoreProperties(ignoreUnknown = true)注释。进行谷歌搜索。

在您的示例中,不需要使用@JsonProperty注释,但我喜欢使用它。

还有其他方法可以设置“ignoreUnknown”值,Jackson 文档是一本很好且有价值的读物。


POJO 示例


@JsonIgnoreProperties(ignoreUnknown = true)

public class TopClass

{

    @JsonProperty("foo") // This is optional in your example.

    private Foo foo;

}



@JsonIgnoreProperties(ignoreUnknown = true)

public class Foo

{

    @JsonProperty("bar")

    private int bar;

}

读取 POJO 的示例代码


private TopClass topClassVariableName;


topClassVariableName = objectMapper.readValue(JSON HERE, TopClass.class);


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信