gpt4 book ai didi

java - 用于枚举接口(interface)的 Spring @ResponseBody 和 Jackson JsonSerializer

转载 作者:行者123 更新时间:2023-12-01 11:06:37 25 4
gpt4 key购买 nike

相关问题

Spring @ResponseBody Jackson JsonSerializer with JodaTime

Usage of @JsonSerialize and JsonSerializer

问题

我有这个枚举:

@JsonSerialize(using = JSONI18NSerializer.class)
public enum Status implements EnumOption {

SOMETHING("translate.key,something"),
ELSE("translate.key.else");

private String status;

private Status(final String status) {
this.status = status;
}


@Override
public String getDescription() {

ReloadableResourceBundleMessageSource bundle =
(ReloadableResourceBundleMessageSource) ContextLoader.getCurrentWebApplicationContext()
.getBean("messageSource");

Locale locale = LocaleContextHolder.getLocale();

return bundle.getMessage(this.status, null, locale).toString();
}
}

实现了一个简单的接口(interface):

public interface EnumOption {
public String getDescription();
}

我编写了这个自定义 JsonSerializer:

public class JSONI18NSerializer extends JsonSerializer<EnumOption> {
@Override
public void serialize(
EnumOption object,
JsonGenerator generator,
SerializerProvider provider)
throws IOException, JsonProcessingException {

generator.writeStartObject();
generator.writeFieldName("key");
generator.writeString(object.toString());
generator.writeFieldName("status");
generator.writeString(object.getDescription());
generator.writeEndObject();
}
}

问题

我错过了什么?通过在我的 Controller 上使用 @ResponseBody,我得到了一个带有简单 {status:"translation of Something"} 的 JSON,但我需要 {status : {key:"something", status :“某事物的描述”}}.

我必须在其他地方声明自定义序列化程序吗?有没有更好的方法来实现我的需要?

我正在使用 Spring 4.1.7 和 Jackson 2.5.1,并询问 1.9.13

感谢您的帮助!!

编辑这是 Controller 方法:

 @RequestMapping(value = "/search", method = RequestMethod.GET)
@ResponseBody
public List<Config> getAll(final ModelMap model) {
return this.configService.searchConfig();

}

状态枚举是 Config 类的一个属性,它是:

 @Document
public class Config {

private Status status;

public Status getStatus() {
return this.status;
}
public void setStatus(final Status status) {
this.status = status;
}
}

最佳答案

尝试一下,我认为您正在将自定义输出的生成与 JsonSerializer

public class JSONI18NSerializer extends JsonSerializer<EnumOption> {
@Override
public void serialize(
EnumOption object,
JsonGenerator generator,
SerializerProvider provider)
throws IOException, JsonProcessingException {
generator.writeStartObject();
generator.writeFieldName("status");
generator.writeStartObject();
generator.writeFieldName("key");
generator.writeString(object.toString());
generator.writeFieldName("status");
generator.writeString(object.getDescription());
generator.writeEndObject();
generator.writeEndObject();
}
}

我收到以下输出:

{
"status" : {
"key" : "ELSE",
"status" : "desc"
}
}

关于java - 用于枚举接口(interface)的 Spring @ResponseBody 和 Jackson JsonSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32885642/

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