2015-09-09 36 views
0

請我試着將這個JSON傳遞給一個控制器在春季框架。將此JSON與對象的嵌套列表傳遞給休息控制器在彈簧中的錯誤

{ 
"date" : "2012-02-09", 
"subject" : "Margin ", 
"selections" : [ 
        {"FGY" : ["Try", "Harder"]},{"LGY" : ["Harder", "Try"]} 
       ] 
} 

的選擇類是

import org.springframework.context.annotation.Bean; 
    import org.springframework.stereotype.Component; 

    import java.io.Serializable; 
    import java.util.List; 

    @Component 
    public class Selections implements Serializable { 

    //@Bean 
    public Selections(){ 

    } 

    @JsonProperty("FGY") 
    private List<String> FGY; 

    @JsonProperty("LGY") 
    private List<String> LGY; 

    public List<String> getFGY() { 
     return FGY; 
    } 

    public void setFGY(List<String> FGY) { 
     this.FGY = FGY; 
    } 

    public String getLGY(){ 
     return LGY; 
    } 

    public void setLGY(List<String> LGY) { 
     this.LGY = LGY; 
    } 
} 

的的ReportRequest類是:

import org.springframework.beans.factory.annotation.Autowired; 
    import org.springframework.context.annotation.Bean; 
    import org.springframework.stereotype.Component; 

    import java.io.Serializable; 
    import java.util.Date; 
    import java.util.List; 

    @Component 
    public class ReportRequest implements Serializable{ 

private String report; 
private Date date; 
private List<Selections> selections; 

public ReportRequest(){ 

} 

public String getReport() { 
    return report; 
} 

public void setReport(String report) { 
    this.report = report; 
} 

public Date getDate() { 
    return date; 
} 

public void setDate(Date date) { 
    this.date = date; 
} 

public List<Selections> getSelections() { 
    return selections; 
} 

public void setSelections(List<Selections> selections) { 
    this.selections = selections; 
} 
public ReportResponse processRequest() { 

    for(Selections selection : getSelections()){ // null error occurs on either FGY or LGY depending on which is the second in the json list 
     selection.getFGY().forEach(System.out::println); 
     selection.getLGY().forEach(System.out::println); 
    } 
    return null; 
} 

控制器

@RequestMapping(value = "/request_report" , method = RequestMethod.POST) 
public @ResponseBody 
ReportResponse receive(@RequestBody ReportRequest reportRequest) { 
    return reportRequest.processRequest(); 
} 

這是錯誤:顯示java.lang.NullPointerException: null

進行調試我能夠發現ReportRequest processRequest方法中發生null錯誤。

OLD ERROR(解決)了的ReportRequest對象的其他屬性被正確地從JSON但屬性「選擇」初始化失敗來初始化字符串列表中的「FGY」對象的JSON

編輯(NEW ERROR):新的錯誤是,只有json的選擇列表中的第一個對象被傳遞到spring class ReportRequest的選擇列表中。列表中的第二個對象不被傳遞。因此,json中的第二個發生null錯誤。例如LGY目前是第二。

堆棧跟蹤:

` 
java.lang.NullPointerException: null 
    at com.teamapt.alm.utils.ReportRequest.processRequest(ReportRequest.java:79) 
    at com.teamapt.alm.controller.AlmController.receive(AlmController.java:66) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:291) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at com.teamapt.alm.config.Config$1.doFilter(Config.java:36) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:102) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration$MetricsFilter.doFilterInternal(MetricFilterAutoConfiguration.java:90) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
+0

請添加跟蹤輸出。 –

+0

跟蹤添加請求 – jibi

+0

編輯已完成,以防止再次詢問相同的問題。所以一個新的錯誤。請幫助 – jibi

回答

2

給這個的getter/setter組合

public List<String> getFGY() { 
    return FGY; 
} 

public void setFGY(List<String> FGY) { 
    this.FGY = FGY; 
} 

傑克遜(我以爲是你使用的是什麼你的JSON序列化/反序列化)將確定屬性的名稱是fgy,而不是FGY。反序列化因此不會找到你的財產。

您可以標註一個與任何

@JsonProperty("FGY") 

明確設置你期望的屬性名稱。

+0

這工作。非常感謝這一點。永遠不會知道案例(更低或更高)可能是問題 – jibi

+1

@jibi我相信傑克遜默認使用bean命名約定。 –

+0

請查看新錯誤 – jibi

0

在父母集合的子類中嘗試使用@JsonIgnore。它試圖遞歸地序列化。

按照此鏈接處理此問題的其他方法。

相關問題