[英]Using spring converter in @RequestBody
是否可以强制转换器(org.springframework.core.convert.converter.Converter)完成 json object 映射?
Json 代码示例:
{
"name": "somename",
"customObject": id
}
其中 somename - 字符串,id - integer 值
映射到:
@Getter
@Setter
@NoArgConstructor
public class ParentObject{
private String name;
private CustomObject customObject;
}
转换器代码示例:
@Component
public class CustomObjectConverter implements Converter<String, CustomObject>{
@Autowired
private CustomObjectService customObjectService;
@Override
public CustomObject convert(String arg0) {
Long id = Long.parseLong(arg0);
return customObjectService.findById(id);
}
}
我想要实现的是 map,json 到 object,它将自动从嵌套的 object 中获取。
你应该实现自己的JacksonCustomMapper
,通过扩展JsonMapper
,然后登记入组的HttpMessageConverters
。 但是,我不建议污染默认转换,您可以在@RequestBody
传递一个不完整的 json,Jackson 会将其解析为您的对象,在您的 json 对象中不传递错误的键就足够了......一个例子(成千上万)在这里: http : //magicmonster.com/kb/prg/java/spring/webmvc/jackson_custom.html 。 好好享受 :-)
我认为有更好的方法来解决这个问题。 您只需要再添加一个实现:
com.fasterxml.jackson.databind.util.Converter
并在您的 object 上添加注释:
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
...
@JsonDeserialize(converter = CustomObjectConverter.class)
private CustomObject customObject;
因此,您的代码将如下所示。 Model:
@Getter
@Setter
@NoArgConstructor
public class ParentObject{
private String name;
@JsonDeserialize(converter = CustomObjectConverter.class)
private CustomObject customObject;
}
转换器:
@Component
public class CustomObjectConverter implements
org.springframework.core.convert.converter.Converter<String, CustomObject>,
com.fasterxml.jackson.databind.util.Converter<String, CustomObject>{
@Autowired
private CustomObjectService customObjectService;
@Override
public CustomObject convert(String arg0) {
Long id = Long.parseLong(arg0);
return customObjectService.findById(id);
}
@Override
public JavaType getInputType(TypeFactory typeFactory) {
return typeFactory.constructType(String.class);
}
@Override
public JavaType getOutputType(TypeFactory typeFactory) {
return typeFactory.constructType(CustomObject.class);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.