【问题标题】:How to convert a Java object to key-value string如何将 Java 对象转换为键值字符串
【发布时间】:2023-01-12 19:07:23
【问题描述】:

我有这个 Java 对象,我想将它转换成由 & 符号连接的键值字符串。

private String name;
private int age;
private String address;
private String city;

转换成这个键值字符串。

name=John&age=30&address=12st NW Street&city=New York

我试过 Jackson,但我不想要 JSON 字符串。 我试过 URIEncoder 但我不需要对它进行编码。 尝试使用反射循环每个属性,但我想有更好的方法。

我考虑过 toString,但我想要更灵活的东西。因为属性名称可能会更改。

【问题讨论】:

  • 您可以通过覆盖 toString() 函数来实现这一点。
  • 您可以使用 Jackson 将 pojo 转换为普通地图,然后基本上只是将条目连接成一个字符串。当然,这不适用于更复杂的对象和更深层次的嵌套——因此您可能需要重新考虑该方法。
  • "name=" + name + "&age=" + age + "&address=" + address + "&city=" + city
  • 我已经更新了问题。不想使用 toString 因为属性名称可能会更改,而且我不想在 2 个不同的地方进行更新。
  • “我需要对其进行编码”到底是什么意思?

标签: java


【解决方案1】:

我会同意@Thomas 的提议,您可以在其中使用例如:

ObjectMapper mapper = new ObjectMapper();
Map<String, String> map = mapper.convertValue(person, Map.class);

String response = map.entrySet().stream()
        .map(entry -> String.format("%s=%s", entry.getKey(), entry.getValue()))
        .collect(Collectors.joining("&"));

产出

name=John&age=30&address=12st NW Street&city=New York

【讨论】:

    【解决方案2】:

    您可以覆盖 toString() 函数以获得所需的格式 -

    private String name;
    private int age;
    private String address;
    private String city;
    
    @Override
    public String toString() {
        return "name=" + name +
                "&age=" + age +
                "&address=" + address +
                "&city=" + city;
    }
    

    【讨论】:

    • 您可以根据需要在此处更改格式。
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2021-12-06
    • 2017-03-26
    • 2015-05-24
    • 2020-04-19
    • 2012-01-22
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多