我有以下传入json,我将其反序列化为Model.java,然后将该java对象复制到ModelView.java。我不想将日期从String转换为毫秒,并将发送的json作为响应发送。 我该如何去做?如何在jackson中序列化和反序列化时更改JSON节点的数据格式
我有具体的理由,使用对象映射器将Model.java中的值复制到ModelView.java。所以请不要建议修改该部分。我正在通过注释来做到这一点。我很确定它可以完成,但不知道如何。
这里提供的json是一个简单的。我在实际场景中有一个很大的json。
传入的JSON
{
"date":"2016-03-31"
}
传出的Json
{
"date":236484625196
}
我的控制器类
@Controller
public class SomeController extends BaseController {
@Autowired
private SomeService someService;
@RequestMapping(method = RequestMethod.GET, produces = "application/json")
public @ResponseBody
ResponseEntity<RestResponse> getDetails(HttpServletRequest request, HttpServletResponse response) {
Model model = someService.getData();
ModelView modelView = ModelView.valueOf(model);
return getSuccessResponse(modelView);
}
}
Model.java
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Model implements Serializable {
private String date;
//normal getters and setters
}
ModelView.java
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ModelView implements Serializable {
private Long date;
//normal getters and setters
public static ModelView valueOf(Model model){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
ObjectMapper mapper = new ObjectMapper();
ModelView modelView = mapper.convertValue(model, ModelView.class);
try {
modelView.setDate(sdf.parse(model.getDate()).getTime());
} catch (ParseException e) {
IntLogger.error("logging error here");
}
return modelView;
}
}
我愿意从“日期”改变变量名称到别的东西ModelView.java但传出JSON应保持不变。
嗨@Andrew我接受你的建议来实现自定义序列化器,但做了一点不同。我将ModelView.java的数据类型从“Long”更改为“String”,并在该字段上仅实现了一个序列化程序。而在串行器中,而不是'jsonGenerator.writeString',我使用了'jsonGenerator.number',它工作。 – advaita
太棒了!很高兴听到它的工作! –