Model.java にデシリアライズしてから、その Java オブジェクトを ModelView.java にコピーします。日付を文字列からミリ秒に変換して、発信 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);
}
}
モデル.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 で変数名を「date」から別の名前に変更することはできますが、発信する json は同じままにする必要があります。