spring - 如何在spring RESTful中更改控制器后的值
问题描述
@RestController
我想在春季课后更改数据
我需要根据指定的语言更改字段数据。
例子:
枚举:
public enum Gender {
WOMAN, MAN, OTHER
}
控制器:
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
public User get(@PathVariable Long id) throws Exception {
log.debug("Entering get( id={} )", id);
User user = null;
try {
user = UserService.get(id);
} catch (Exception e) {
log.debug("Error occurred in get().", e);
throw e;
}
return user;
}
这个输出:
{
fisrtName: 'john',
lastName: 'doe',
gender: 'man'
}
更改为此输出:
{
fisrtName: 'john',
lastName: 'doe',
gender: 'homme'
}
解决方案
我假设 user.gender 是一个枚举。然后您可以将自定义序列化器和反序列化器添加到您的 JSON 映射器(希望是杰克逊)。
@JsonComponent
public class TranslatedGenderJsonComponent {
public static class TranslatedGenderSerializer extends StdSerializer<Gender> {
public TranslatedGenderSerializer () {
super(Gender.class);
}
public void serialize(
Gender gender, JsonGenerator generator, SerializerProvider provider)
throws IOException, JsonProcessingException {
String translatedGender = myTranslateFunction(gender);
generator.writeString(translatedGender );
}
}
public static class TranslatedGenderDeserializer extends StdDeserializer<Gender> {
public TranslatedGenderDeserializer () {
super(Gender.class);
}
public Gender deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonToken currentToken = jp.getCurrentToken();
if (currentToken.equals(JsonToken.VALUE_STRING)) {
String text jp.getText().trim();
Gender gender = myInverseTranslateFunction(text);
return gender;
} else if (currentToken.equals(JsonToken.VALUE_NULL)) {
return getNullValue();
} else {
throw ctxt.mappingException(Gender.class);
}
}
}
}
此代码未经测试,只是在浏览器中编写的!(我对反序列化器/解析器代码非常不确定。)但我希望它能指导您找到解决方案。
推荐阅读
- javascript - 在一个文件中使用数字签名和图像输入按钮
- java - Java类只有一个构造函数,构造函数没有参数,该类的所有实例都会指向堆中的同一个对象?
- c# - 如何使用来自给定 URL 的 HTTP 响应将文件下载到默认存储位置
- flutter - Flutter 和 google_maps_flutter - 为“我的位置”按钮单击添加侦听器(setOnMyLocationButtonClickListener?)
- php - Google API 快速入门
- ruby-on-rails - 由于方法调用另一个关系,Graphql Ruby N + 1 查询
- android - 我不能在我的项目中使用库中使用的依赖项
- node.js - Mongoose 删除文档字段而不是整个文档
- vba - Libreoffice 无法填充列表框,因为我无法正确声明列表框
- python - Pandas 数据框中每增加 100 个新列的峰值运行时间