jak*_*etr 15 java rest spring jackson spring-boot
我想为某些类使用自定义JSON反序列化器(此处为Role)但我无法使其正常工作.自定义反序列化器不会被调用.
我使用Spring Boot 1.2.
解串器:
public class ModelDeserializer extends JsonDeserializer<Role> {
@Override
public Role deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return null; // this is what should be called but it isn't
}
}
Run Code Online (Sandbox Code Playgroud)
控制器:
@RestController
public class RoleController {
@RequestMapping(value = "/role", method = RequestMethod.POST)
public Object createRole(Role role) {
// ... this is called
}
}
Run Code Online (Sandbox Code Playgroud)
@JsonDeserialize 角色
@JsonDeserialize(using = ModelDeserializer.class)
public class Role extends Model {
}
Run Code Online (Sandbox Code Playgroud)Jackson2ObjectMapperBuilder Java配置中的bean
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.deserializerByType(Role.class, new ModelDeserializer());
return builder;
}
Run Code Online (Sandbox Code Playgroud)我究竟做错了什么?
编辑它可能是@RestController因为它适用于@Controller......
Ily*_*nov 22
首先,您不需要覆盖Jackson2ObjectMapperBuilder以添加自定义反序列化程序.当您无法添加@JsonDeserialize注释时,应使用此方法.你应该使用@JsonDeserialize或覆盖Jackson2ObjectMapperBuilder.
遗漏的是@RequestBody注释:
@RestController
public class JacksonCustomDesRestEndpoint {
@RequestMapping(value = "/role", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Object createRole(@RequestBody Role role) {
return role;
}
}
@JsonDeserialize(using = RoleDeserializer.class)
public class Role {
// ......
}
public class RoleDeserializer extends JsonDeserializer<Role> {
@Override
public Role deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
// .................
return something;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23742 次 |
| 最近记录: |