자바의 문제에 대한 직렬화의 관심에서 JSON JSON 직렬화는, 게터을 무시할 수없는

자바 JSON 직렬화에서, 게터을 무시할 수없는

문제를 재현하는 방법

public class AjaxJson {
    private boolean success; private String msg; private Object obj; private Map<String, Object> attributes; //getter and setter public String getJsonStr() { JSONObject obj = new JSONObject(); obj.put("success", this.isSuccess()); obj.put("msg", this.getMsg()); obj.put("obj", this.obj); obj.put("attributes", this.attributes); return obj.toJSONString(); } }

위는 인터페이스 클래스, 우리는 JSON 반환에이 클래스의 시퀀스를 대상으로해야합니다. 그 다음이 작동 일반적으로 springmvc.

@RequestMapping(params = "/get")
@ResponseBody
public AjaxJson del(HttpServletRequest request) { AjaxJson json = new AjaxJson(); //省略业务操作 return json; }

기본적으로 반환 ResponseBody객체가 직접 JSON 직렬화. 이 시간, 우리는 반환 된 JSON 볼 수 있습니다.

{
    "success": "true",
    "Msg":"1", "obj":{ ... }, "attributes": null, "jsonStr":"{"success": "true","Msg":"1","obj":{...},"attributes": null,}" }

분명히, 우리는 기대와 동일 하나 개없는 원하는 jsonstr 필드. 내가 생각 이번에는 springmvc 문제가되지 않습니다. 결과는 신중하게 생각, 직접 사실, JSON으로 객체를 직렬화 할 수 springnvc 이유는, 우리는 실제 작업은 직렬화 잭슨이 라이브러리에 참여하고, 직장에서 프로필을 추가 할 수 있습니다. 그래서, 혼자 잭슨을 사용하고 결과를 JSON 문자열이 확신 할 수있는 아래, 이전과 동일 리턴 된 라이브러리의 설계 자체 잭슨.

깊이 연구

이 호기심으로, 나는 일반적으로 JSON 직렬화 라이브러리에 사용되는 자바가 모든이 있는지 확인하기 위해 시도했습니다. 주요 라이브러리가 잭슨, fastjson 및 GSON을.

단지 직렬화 된 객체 필드 - 검사를 발견 한 후, JSON 문자열 잭슨 알리 구글이 우리가 원하는 결과를 반환 GSON을 제외하는 jsonstr 필드되게됩니다 fastjson를 반환했습니다.

그래서 이러한 라이브러리에서 일련의 원칙을 발견 :

  • 잭슨 fastjson과는
    시간의 순서에 따라 우선 오브젝트 클래스를 얻을 반사법 발견 다음을 얻기 위해, 상기 하부 케이스의 각 키 값 JSON으로 한 값으로 반환 값을 얻는다. 이어서, 상기 재 반사 필드 의 JSON에 첨가 하였다.
  • GSON는
    인기 인수를 발견하지 못했지만, 그것은 방법을 터링해야 느낌과는 아무 상관이 없습니다.

그래서, 당신은 큰 getJsonStr이 볼 수있는 우리의 AjaxJson 클래스 따라서, JSON으로 직렬화의 키와 같은 jsonStr을.

물론, 잭슨은 적절한 주석을 제공, 이러한 방법은 무시 될 수있다. 전자의 방법에서 플러스 @JsonIgnore 을 수행 할 수 있습니다.

개인의 이해

  • 문제가 발생하면, 같은 getter와 setter 메소드와 같은 몇 가지 간단한 장소를 간과하지 않습니다. 하는 getXXX 장소로, 당신은 가져 오기 등의 대안을 사용할 수 있습니다.
  • 때때로 우리는 같은 클래스에 정의 된 private int mAge변수와 메소드 게터입니다 getAge(). 분명히 우리는 시간의 순서에 따라 연령보다는 마법사의 열쇠를 얻을 수 있기를 바랍니다, 다음 반사 게터 방법은 그 존재의 의미를 갖습니다.

참조

추천

출처www.cnblogs.com/kexianting/p/11649392.html