繁体   English   中英

如何将 ObjectNode 转换为 Java POJO 和 Java POJO 转换为 JsonNode?

[英]How to convert ObjectNode to Java POJO and Java POJO to JsonNode?

我有一个 controller 接受ObjectNode作为@RequestBody

ObjectNode代表json以及一些用户数据

{
    "given_name":"ana",
    "family_name": "fabry",
    "email": "fabry@gmail.com",
    "password": "mypass",
    "gender": "FEMALE"
}

Controller.java

@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
    public JsonNode createUser(@RequestBody ObjectNode user){
        return userService.addUser(user);
 }

我想让用户作为ObjectNode将其转换为 Java POJO 将其保存到数据库并再次将其作为JsonNode返回。

UserServiceImpl.java

    private final UserRepository userRepository;
    private final UserMapper userMapper;

    @Override
    public JsonNode addUser(@RequestBody ObjectNode user) {
        try {
            return userMapper.fromJson(user)
                    .map(r -> {
                        final User created = userRepository.save(r);
                        return created;
                    })
                    .map(userMapper::asJson)
                    .orElseThrow(() -> new ResourceNotFoundException("Unable to find user"));
        } catch (RuntimeException re) {
            throw re;
        }
    }

如何将 ObjetcNode 转换为 POJO?

我尝试过这样的事情:

public Optional<User> fromJson(ObjectNode jsonUser) {
  User user = objectMapper.treeToValue(jsonUser, User.class);
}

但是.treeToValue下划线是 read 说:

Add exception to method signature.

这甚至是正确的做法吗?

用户.java

@Builder
@AllArgsConstructor
public class User {

    @Indexed(unique = true)
    public final String email;
    public final String password;
    public final String firstName;
    public final String lastName;
    public final Gender gender;
    public final Instant registrationTime;

    public static User createUser(
            String email,
            String password,
            String firstName,
            String lastName,
            Gender gender,
            Instant registrationTime){
        return new User(email, password, firstName, lastName, gender, registrationTime);
    }
}

.treeToValue是正确的方法。 您得到的编译器错误是因为该方法抛出了一个已检查的异常,您需要重新抛出或处理该异常。 有关已检查异常的更多信息,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM