다음 Incoming json이 있습니다.이 json은 Model.java로 직렬화 해제 한 다음 해당 Java 객체를 ModelView.java에 복사합니다. String에서 milliseconds로 날짜를 변환하고 나가는 json을 응답으로 보내지 않을 것입니다. 어떻게해야합니까?jackson에서 serialize 및 deserialize하는 동안 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은 동일하게 유지해야한다에 "날짜"에서 변수 이름을 변경 열려있어.
안녕하세요 @ 앤드류 맞춤 serializer를 구현하는 데 귀하의 조언을 들었지만 조금씩 다르게 처리했습니다. ModelView.java의 데이터 유형을'Long'에서'String'으로 변경하고 해당 필드에 시리얼 라이저 만 구현했습니다. 그리고'jsonGenerator.writeString'을하는 대신에 serializer에서'jsonGenerator.number'를 사용했습니다. – advaita
좋아요! 그것을 듣고 기쁘다 일했다! –