接口测试 spring5 的 webflux,怎么返回自定义的 json 数据?

围城 · 2018年10月16日 · 最后由 围城 回复于 2018年10月16日 · 2175 次阅读

在服务端没用 webflux 时,我的注册 service 是这么写的

public Map<String, Object> registerService(User user) {
        Map<String, Object> map = new HashMap<>(8);
        map.put("status":1);
        userRepository.save(user);
        return map;

现在换成 webflux 后,得不到和上面同样的结果

public Mono<Map<String, Object>> registerService(User user) {
        Map<String, Object> map = new HashMap<>(8);
        map.put("status", 1);
        userRepository.save(user);
        return Mono.just(map);
    }
最佳回复

参数校验两种方式:

  • 使用@Valid注解自动校验
public Mono<Map<String, Object>> registerService(@Valid User user) {
    return userRepository.save(user).map(u -> {
        Map<String, Object> map = new HashMap<>(2);
        map.put("status", 1);
        return map;
    });
}

// User
public class User {
    @NotNull
    private String username;
    @NotNull
    private String password;
    // getter and setter
}
  • 手动校验
public Mono<Map<String, Object>> registerService(User user) {
    Map<String, Object> map = new HashMap<>(2);
    return Mono.just(user).flatMap(u1 -> {
        if (u1.getUsername() == null) {
            map.put("status", 0);
            map.put("reason", "username is null");
            return Mono.just(map);
        }
        if (u1.getPassword() == null) {
            map.put("status", 0);
            map.put("reason", "password is null");
            return Mono.just(map);
        }
        return userRepository.save(u1).map(u2 -> {
            map.put("status", 1);
            return map;
        });
    });
}

如果没记错的话,貌似是这么写

public Mono<Map<String, Object>> registerService(User user) {
    return userRepository.save(user).map(u -> {
        Map<String, Object> map = new HashMap<>(2);
        map.put("status", 1);
        return map;
    });
}
共收到 8 条回复 时间 点赞

这个不是应该去开发社区发么。。。

恒温 回复

你们阿里现在 spring 用的几啊

如果没记错的话,貌似是这么写

public Mono<Map<String, Object>> registerService(User user) {
    return userRepository.save(user).map(u -> {
        Map<String, Object> map = new HashMap<>(2);
        map.put("status", 1);
        return map;
    });
}
xinufo 回复

很感谢,这样写确实可以达到我的初步要求,但是如果我要判断传递的 user 的合法性 我该在哪修改呢

围城 回复

Controller 里面可以校验吧

blackcoffee 回复

你的意思是说 让我在 controller 里校验, 而不是在 service 里校验是吗?

参数校验两种方式:

  • 使用@Valid注解自动校验
public Mono<Map<String, Object>> registerService(@Valid User user) {
    return userRepository.save(user).map(u -> {
        Map<String, Object> map = new HashMap<>(2);
        map.put("status", 1);
        return map;
    });
}

// User
public class User {
    @NotNull
    private String username;
    @NotNull
    private String password;
    // getter and setter
}
  • 手动校验
public Mono<Map<String, Object>> registerService(User user) {
    Map<String, Object> map = new HashMap<>(2);
    return Mono.just(user).flatMap(u1 -> {
        if (u1.getUsername() == null) {
            map.put("status", 0);
            map.put("reason", "username is null");
            return Mono.just(map);
        }
        if (u1.getPassword() == null) {
            map.put("status", 0);
            map.put("reason", "password is null");
            return Mono.just(map);
        }
        return userRepository.save(u1).map(u2 -> {
            map.put("status", 1);
            return map;
        });
    });
}
xinufo 回复

谢谢大佬,非常感谢,非常感谢

围城 关闭了讨论 10月16日 13:37
围城 重新开启了讨论 10月16日 13:51
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册