【发布时间】:2015-10-01 10:47:50
【问题描述】:
相关问题
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();
}
}
实现了一个简单的接口:
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();
}
}
问题
我错过了什么?通过在我的控制器上使用@ResponseBody,我得到一个带有简单{status:"translation of something"} 的JSON,但我需要{status : {key:"something" , status : "description of something"}}。
我是否必须在其他地方声明自定义序列化程序?有没有更好的方法来实现我的需要?
我正在使用 Spring 4.1.7 和 Jackson 2.5.1 并询问 1.9.13
感谢您的帮助!!
编辑 这是控制器方法:
@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;
}
}
【问题讨论】:
标签: java json spring spring-mvc enums