GET请求将MongoDB中的JSON对象反序列化为Java对象

时间:2019-02-12 05:55:57

标签: java spring jackson

我在Java中有一些嵌套的类,这里简化了。吸气剂和吸气剂存在。

示例

public class Planet {
@JsonProperty("name")
private String name;
@JsonProperty("moons")
private List<Moon> moons;
}

public class Moon {
@JsonProperty("moonname")
private String name; 
@JsonProperty("craters")
private int craters;
}

我希望能够将mongo上的记录反序列化(遵循相同的结构)到其余控制器上的java对象,特别是HTTP GET请求。

@RestController
@RequestMapping("/planets")
public class PlanetController {
  @Autowired
  private PlanetService planetService;
@RequestMapping("/")
  public List<Planet> getAllPlanets() {
      //Need to deserialize here
  return planetService.getAll();
  }

  @RequestMapping("/{name}")
  public Planet getItemsWithName(@PathVariable("name") String name) {
      //deserialize here
      return planetService.getEntryWithName(name.toLowerCase());
  }

PlanetService.getAll()期望List的返回类型。 getEntryWithName()应该是Planet的返回类型。

如何在getAll()中循环结果,以便在返回结果之前对它们进行反序列化?

使用Jackson的对象映射器,我可以将Java对象序列化为JSON对象。

ObjectMapper mapper = new ObjectMapper();

        try {
            mapper.writeValue(new File("target/mars.json"), mars);
        } catch (IOException e) {
            e.printStackTrace();
        }

我可能可以将readValue用于相反的过程,但是我不知道如何循环结果。 我将感谢您的帮助。让我知道是否不清楚。

1 个答案:

答案 0 :(得分:0)

  public List<Planet> getAllPlanets() {
      List<Planet> planets = planetService.getAll();
      String jsonString = new ObjectMapper().writeValueAsString(planets);
      return planets;
  }