Json을 중첩 된 pojo로 역 직렬화

Gringogordo

비슷한 질문이 몇 개있는 것 같지만 답을 찾을 수없는 것 같습니다.

컨트롤러의 jqGrid 필터 속성에서 반환 한 json을 구문 분석하려고합니다. 그것을 작동시키기 위해 나는 그것이 작동하고 나면 다음 단계를 수행하고 RequestBody로 전달하고 Spring 이이 중 일부를 처리하도록 희망하지만 매우 투박한 방식으로하고 있습니다. 지금은 가능하다면 이런 식으로 작동하고 싶습니다. 그냥 깡통에서 작동 해야하는 것 같아서 어쩌면 내가 어리석은 오류를 범했을까요?

json 샘플

  {"groupOp":"AND","rules":[{"field":"accountName","op":"cn","data":"E"},{"field":"accountRef","op":"cn","data":"E"}]}

데이터를 직렬화 해제하기 위해 2 개의 빠른 포조를 만들었습니다.

@SuppressWarnings("unused")
private class Filter {

    private String groupOp;
    private List<Rule> rules; 

    public String getGroupOp() {
        return groupOp;
    }
    public void setGroupOp(String groupOp) {
        this.groupOp = groupOp;
    }

    public List<Rule> getRules() {
        return rules;
    }
    public void setRules(List<Rule> rules) {
        this.rules = rules;
    }

}   

private class Rule {

        private String field;
        private String op; 
        private String data; 

        public String getField() {
            return field;
        }
        public void setField(String field) {
            this.field = field;
        }

        public String getOp() {
            return op;
        }
        public void setOp(String op) {
            this.field = op;
        }

        public String getData() {
            return data;
        }
        public void setData(String data) {
            this.data = data;
        }
}

json 문자열은 필터라는 문자열 매개 변수에 있으며이를 역 직렬화하는 매우 기본적인 코드가 있습니다.

byte[] jsonData = filter.getBytes();

ObjectMapper objectMapper = new ObjectMapper();         
Filter f = objectMapper.readValue(jsonData, Filter.class);

샘플을 읽은 것은 이것이 매우 기본적이고 잘못 작성되었지만 작업을 수행해야한다는 것입니다. 대신 오류가 발생합니다 ...

나는 여기에 완전한 오류를 복사했습니다. 아무도 내가 어디로 잘못 가고 있는지 말해 줄 수 있습니까?

com.fasterxml.jackson.databind.JsonMappingException: Can not construct 
instance of com.app.AppController$Filter: no String-argument constructor/factory method to deserialize from String value (' {"groupOp":"AND","rules":[{"field":"accountName","op":"cn","data":"E"},{"field":"accountRef","op":"cn","data":"E"}]}')
 at [Source: [B@5bfd2bb5; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1012) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:370) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:315) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1290) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:159) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:150) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2929) ~[jackson-databind-2.8.7.jar:2.8.7]
    at com.app.AppController.downloadAccounts(AppController.java:580) ~[classes/:na]
    at com.app.AppController$$FastClassBySpringCGLIB$$6a077f1a.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) ~[spring-aop-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) ~[spring-aop-5.0.0.M3.jar:5.0.0.M3]
    at com.app.AppControllerController$$EnhancerBySpringCGLIB$$8ff0ac7a.downloaAccounts(<generated>) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220) ~[spring-web-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) ~[spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:964) [spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:856) [spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:841) [spring-webmvc-5.0.0.M3.jar:5.0.0.M3]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-5.0.0.M3.jar:5.0.0.M3]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.0.M3.jar:5.0.0.M3]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) [tomcat-embed-core-7.0.47.jar:7.0.47]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_101]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_101]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
fps

Filter둘 다 Rule개인 내부 클래스 임을 알 수 있습니다. 이것이 Jackson이 인스턴스를 만들 수없는 이유입니다. 공용 중첩 클래스를 만들어보십시오. 즉, 클래스로 선언 public static하거나 별도의 소스 파일로 이동하십시오.

또한 스택 추적에서 바이트 배열에 시작 부분에 작은 따옴표가 있고 끝 부분에 다른 따옴표가 있음을 알았습니다. 이를 제거해야합니다. 첫 번째 문자는 여는 중괄호이고 마지막 문자는 닫는 중괄호 여야합니다. 그렇지 않으면 readValue마치 문자열 인 것처럼 받아들입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

중첩 된 JSON을 중첩 된 Dictionary <string, object>로 역 직렬화

분류에서Dev

JSON.NET으로 중첩 된 JSON 응답 역 직렬화

분류에서Dev

중첩 된 JSON의 Unity 역 직렬화

분류에서Dev

중첩 된 JSON 역 직렬화

분류에서Dev

C #에서 중첩 된 목록으로 JSON 역 직렬화

분류에서Dev

잘못된 변수 이름으로 중첩 된 JSON 역 직렬화

분류에서Dev

System.Text.Json-중첩 된 개체를 문자열로 역 직렬화

분류에서Dev

중첩 된 JSON API 데이터를 CSV로 역 직렬화 및 내보내기

분류에서Dev

Symfony 4에서 중첩 된 DateTime 객체를 사용하여 json을 엔티티로 역 직렬화

분류에서Dev

AWS Lambda에서 중첩 된 JSON 문자열 역 직렬화 (C #)

분류에서Dev

JSON.NET URL에서 중첩 된 데이터 역 직렬화

분류에서Dev

중첩 된 JSON 역 직렬화의 어려움

분류에서Dev

중첩 된 사전이있는 JSON 파일 역 직렬화

분류에서Dev

Json.NET을 사용하여 Json String에서 중첩 된 DataSet 역 직렬화

분류에서Dev

Retrofit을 사용하여 중첩 된 JSON을 역 직렬화 할 수 없음 (Android)

분류에서Dev

중첩 된 json 문자열을 역 직렬화하면 null 값이됩니다.

분류에서Dev

c # 중첩 된 Json 역 직렬화는 null을 반환합니다.

분류에서Dev

다단계 중첩으로 JSON 역 직렬화

분류에서Dev

중첩 된 객체의 필드 중 하나를 기반으로 중첩 된 JSON 객체를 기본 유형으로 역 직렬화하는 방법

분류에서Dev

특정 중첩 속성을 클래스로 역 직렬화

분류에서Dev

Newtonsoft Json.Net을 사용하여 문자열 화 된 (따옴표로 묶인) 중첩 된 개체 역 직렬화

분류에서Dev

C #에서 Newtonsoft를 사용하여 중첩 된 JSON 개체의 역 직렬화

분류에서Dev

xamarin c # 중첩 된 개체를 포함하는 Json 역 직렬화

분류에서Dev

JsonConvert.DeserializeObject를 사용하여 중첩 된 Json 문자열 역 직렬화

분류에서Dev

System.Text.Json을 사용하여 배열 json 개체의 중첩 된 배열을 역 직렬화

분류에서Dev

Wordpress API JSON 응답에서 중첩 된 JSON 태그 및 첨부 파일을 역 직렬화

분류에서Dev

현재 JSON 배열 (예 : [1,2,3])을 복잡하고 중첩 된 개체가있는 유형으로 역 직렬화 할 수 없습니다.

분류에서Dev

복잡하고 중첩 된 JSON을 어떻게 역 직렬화 할 수 있습니까?

분류에서Dev

JSON 역 직렬화-값으로 필요한 중첩 목록 및 키

Related 관련 기사

  1. 1

    중첩 된 JSON을 중첩 된 Dictionary <string, object>로 역 직렬화

  2. 2

    JSON.NET으로 중첩 된 JSON 응답 역 직렬화

  3. 3

    중첩 된 JSON의 Unity 역 직렬화

  4. 4

    중첩 된 JSON 역 직렬화

  5. 5

    C #에서 중첩 된 목록으로 JSON 역 직렬화

  6. 6

    잘못된 변수 이름으로 중첩 된 JSON 역 직렬화

  7. 7

    System.Text.Json-중첩 된 개체를 문자열로 역 직렬화

  8. 8

    중첩 된 JSON API 데이터를 CSV로 역 직렬화 및 내보내기

  9. 9

    Symfony 4에서 중첩 된 DateTime 객체를 사용하여 json을 엔티티로 역 직렬화

  10. 10

    AWS Lambda에서 중첩 된 JSON 문자열 역 직렬화 (C #)

  11. 11

    JSON.NET URL에서 중첩 된 데이터 역 직렬화

  12. 12

    중첩 된 JSON 역 직렬화의 어려움

  13. 13

    중첩 된 사전이있는 JSON 파일 역 직렬화

  14. 14

    Json.NET을 사용하여 Json String에서 중첩 된 DataSet 역 직렬화

  15. 15

    Retrofit을 사용하여 중첩 된 JSON을 역 직렬화 할 수 없음 (Android)

  16. 16

    중첩 된 json 문자열을 역 직렬화하면 null 값이됩니다.

  17. 17

    c # 중첩 된 Json 역 직렬화는 null을 반환합니다.

  18. 18

    다단계 중첩으로 JSON 역 직렬화

  19. 19

    중첩 된 객체의 필드 중 하나를 기반으로 중첩 된 JSON 객체를 기본 유형으로 역 직렬화하는 방법

  20. 20

    특정 중첩 속성을 클래스로 역 직렬화

  21. 21

    Newtonsoft Json.Net을 사용하여 문자열 화 된 (따옴표로 묶인) 중첩 된 개체 역 직렬화

  22. 22

    C #에서 Newtonsoft를 사용하여 중첩 된 JSON 개체의 역 직렬화

  23. 23

    xamarin c # 중첩 된 개체를 포함하는 Json 역 직렬화

  24. 24

    JsonConvert.DeserializeObject를 사용하여 중첩 된 Json 문자열 역 직렬화

  25. 25

    System.Text.Json을 사용하여 배열 json 개체의 중첩 된 배열을 역 직렬화

  26. 26

    Wordpress API JSON 응답에서 중첩 된 JSON 태그 및 첨부 파일을 역 직렬화

  27. 27

    현재 JSON 배열 (예 : [1,2,3])을 복잡하고 중첩 된 개체가있는 유형으로 역 직렬화 할 수 없습니다.

  28. 28

    복잡하고 중첩 된 JSON을 어떻게 역 직렬화 할 수 있습니까?

  29. 29

    JSON 역 직렬화-값으로 필요한 중첩 목록 및 키

뜨겁다태그

보관