猿问

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

我正在学习 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

@EnableAutoConfiguration

public 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 文件中的特定数据。请给我一些建议或步骤。谢谢


浮云间
浏览 247回答 2
2回答

胡子哥哥

与往常一样,有几种可能的方法。除了手动解析和提取方法(如何在 Spring 中加载资源并将其内容用作字符串),您还可以尝试更高级的方法并使用像 jackson-databind 这样的库(https://github.com/FasterXML /杰克逊数据绑定)。假设您的资源中有这个 json 对象:{  "foo" : {    "bar" : 42  }}并且 Jackson ObjectMapper 已经注入:@Autowiredprivate 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

慕哥6287543

这只是带有一些建议的@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);
随时随地看视频慕课网APP

相关分类

Python
我要回答