ITPub博客

首页 > 应用开发 > > 使用 Java Faker 生成随机数

使用 Java Faker 生成随机数

作者:gyu 时间:2019-10-12 11:27:32 0 删除 编辑

原型开发好以后,通常需要一些展示数据。如果没有实际数据,怎样为 Java 程序生成一些有意义的随机数据?


我用过 UUID 和 ThreadLocalRandom 来生成随机数,但是能力有限,无法提供特定领域的随机数据。于是,我开始寻找更好的解决方案。最后找到了 Faker 这个好东西,幸运的是有 Java 版本:Java Faker。不仅使用方便,而且可以设置多个领域,几秒钟内生成需要的随机数。

1. Java Faker 上手

在 Maven项目中添加 Java Faker 依赖:

com.github.javafaker

javafaker

0.18

使用前,创建一个 Faker 对象:

Faker faker = new Faker();

Faker 方法调用时会随机访问底层数据,因此不需要每次都创建一个实例。Java Faker 通过 /src/main/resources 中的 .yml 获取数据。

使用 Faker 可以访问30多个不同的领域,为几乎每个用例创建随机数。可以使用流式 API 生成随机数:

String firstName = faker.name().firstName();

String appName = faker.app().name();

String foodIngredient = faker.food().ingredient();

包含的领域有:

金融

视频

书籍

姓名

地址

商务

…

此外还包含一些有趣的领域:

尤达

查克·诺里斯

哈利·波特

指环王

…

2. Java Faker 使用示例

为了演示 Java Faker,这里通过一个 REST API 返回随机数量的 person、book 和 food 对象。虽然示例采用了 Spring Boot 2.1 和 Java 11,但是其他版本也可以正常工作。

示例应用提供了不同的 Endpoint 获取随机数据:

@RestController

@RequestMapping("/random")

public class RandomDataEndpoint {

@Autowired

private ObjectMapper objectMapper;

@GetMapping("/persons")

public JsonNode getRandomPersons() {

Faker faker = new Faker();

ArrayNode persons = objectMapper.createArrayNode();

for (int i = 0; i < 10; i++) {

persons.add(objectMapper.createObjectNode()

.put("firstName", faker.name().firstName())

.put("lastName", faker.name().lastName())

.put("title", faker.name().title())

.put("suffix", faker.name().suffix())

.put("address", faker.address().streetAddress())

.put("city", faker.address().cityName())

.put("country", faker.address().country()));

}

return persons;

}

}

3. 返回本地化随机数据

随机数据的默认 locale 是 EN。此外,Faker 库还支持返回本地化随机数据。如果指定了 locale 请确保在开发库的支持列表中。可以检查对应的 .yml 文件确认已经有对应的英文版本。

如果指定的 locale 没有对应的翻译,比如 beers,默认会切换到英文。

Faker 构造函数参数默认为 locale:

Faker faker = new Faker(new Locale("de"));

上面的代码指定返回的随机数据为德语:

@GetMapping("/foods")

public JsonNode getRandomFoods() {

Faker faker = new Faker(new Locale("de"));

ArrayNode foods = objectMapper.createArrayNode();

for (int i = 0; i < 10; i++) {

foods.add(objectMapper.createObjectNode()

.put("ingredients" , faker.food().ingredient())

.put("spices", faker.food().spice())

.put("measurements", faker.food().measurement()));

}

return foods;

}

也可以设为列出的其他 locale:

@GetMapping("/books")

public JsonNode getRandomBook() {

Faker faker = new Faker(new Locale("en-US"));

ArrayNode books = objectMapper.createArrayNode();

for (int i = 0; i < 10; i++) {

books.add(objectMapper.createObjectNode()

.put("author", faker.book().author())

.put("genre", faker.book().genre())

.put("publisher", faker.book().publisher())

.put("title", faker.book().title()));

}

return books;

}

示例完整源代码可以在 GitHub 上找到。

github.com/rieckpil/blog-tutorials/tree/master/random-data-in-java-using-java-faker

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/832/viewspace-3163009/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    129
  • 访问量
    1327