gpt4 book ai didi

java - 如何使用 Retrofit 来取消转义 HTML 转义符号?

转载 作者:行者123 更新时间:2023-12-02 10:46:29 26 4
gpt4 key购买 nike

我使用 Retrofit2 和 GSON 来反序列化传入的 JSON。这是我在 Android 应用程序中的代码:

public class RestClientFactory {
private static GsonBuilder gsonBuilder = GsonUtil.gsonbuilder;
private static Gson gson;
private static OkHttpClient.Builder httpClient;
private static HttpLoggingInterceptor httpLoggingInterceptor
= new HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BASIC);

static {
gsonBuilder.setDateFormat(DateUtil.DATETIME_FORMAT);
httpClient = new OkHttpClient.Builder();
gson = gsonBuilder.create();
}

private static Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(BuildConfig.API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(httpClient.build());

private static Retrofit retrofit = builder.build();
}

如果传入的 JSON 中有任何 HTML 转义符号,例如& Retrofit 并没有逃脱它。

例如当传入的 json 有文本时:

Healh & Fitnesss

它按原样反序列化。

但我需要得到这个:

Healh & Fitnesss

如何让 Retrofit 自动转义 HTML 转义语法?

最佳答案

作为通用答案,这可以使用自定义 JsonDeserialiser 来完成,例如:

public class HtmlAdapter implements JsonDeserializer<String> {

@Override
public String deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context)
throws JsonParseException {
return StringEscapeUtils.unescapeHtml4(json.getAsString());
}

}

并添加

gsonBuilder.registerTypeAdapter(String.class, new HtmlAdapter())

到你的静态 block 。方法 StringEscapeUtils.unescapeHtml4 来自外部库 org.apache.commons, commons-text 但您可以用任何您感觉更好的方式来实现。

这个特定适配器的问题是它适用于所有反序列化的String字段,这可能是也可能不是性能问题。

要获得更复杂的解决方案,您还可以查看 TypeAdapterFactory 。这样,如果您想将某种类型适配器应用于该类,您可以决定每个类。因此,如果您的 POJO 继承了一些公共(public)基类,那么检查类是否扩展了该基类并返回像 HtmlAdapter 这样的适配器来对 String 应用 HTML 解码就很简单了。那个类(class)。

关于java - 如何使用 Retrofit 来取消转义 HTML 转义符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52521458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com