我有以下傳入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
太棒了!很高興聽到它的工作! –