【问题标题】:Jackson partial working, cannot return List<Object> or Collection<Object>Jackson 部分工作,无法返回 List<Object> 或 Collection<Object>
【发布时间】:2016-11-02 22:50:51
【问题描述】:

我正在为我的 web 应用程序使用 spring MVC & hibernate。 问题是现在如果返回一个对象,我可以生成 json,但不能生成 List。 我错过了什么?

(1) 如果我访问这个:

@ResponseBody
@RequestMapping("/mobile/userDetail")
public UserDetail generateUserDetailJson(){
    return userDetailService.getUserDetail(1);
}

结果还好,我会得到这个json返回:

{"udId":1,"udTitle":"Mr","udUsername":"username","udFirstname":"firstname","udLastname":"lastname","udGender":"male","udPhoto":"c:/folder/gg.jpg","udPassword":"password","udEmail":"email@email.com","udPhoneHome":"01234567890","udPhoneMobile":"","udType":"customer","udLanguage":"ms","udLoginLast":1466875438000,"udLoginCount":0,"udCreateDatetime":1466875438000,"udStatus":2,"bodyMeasures":[{"bmId":1,"bmHeight":171,"bmNeck":null,"bmShoulder":null,"bmArm":null,"bmChest":null,"bmWaist":null,"bmHip":null,"bmInseam":null,"bmThigh":null,"bmCalf":null,"bmFoot":null,"bmHead":null,"bmCreateDatetime":1466875438000,"bodyMeasureHistories":[]}],"addresses":[],"userDetailHistories":[]}

(2)但是如果我访问这个:

@ResponseBody
@RequestMapping("/mobile/userDetails")
public Collection<UserDetail> generateUserDetailsJson(){
    Collection<UserDetail> collection = userDetailService.listUserDetails(); 
    return collection;
}

我会得到这个例外。

信息:休眠: 选择 this_.ud_id 为 ud_id1_6_0_, this_.ud_title 为 ud_title2_6_0_, this_.ud_username 为 ud_usern3_6_0_, this_.ud_firstname 为 ud_first4_6_0_, this_.ud_lastname 为 ud_lastn5_6_0_, this_.ud_gender 为 ud_gende6_6_0_, this_.ud_photo 为 ud_photo7_6_0_, this_.ud_password 为 ud_passw8_6_0_, this_.ud_email 为 ud_email9_6_0_, this_.ud_phoneHome 作为 ud_phon10_6_0_, this_.ud_phoneMobile 作为 ud_phon11_6_0_, this_.ud_type 为 ud_type12_6_0_, this_.ud_language 为 ud_lang13_6_0_, this_.ud_loginLast as ud_logi14_6_0_, this_.ud_loginCount 为 ud_logi15_6_0_, this_.ud_createDatetime 为 ud_crea16_6_0_, this_.ud_status 为 ud_stat17_6_0_ 从 faddistwardrobedb.user_detail this_ 警告:StandardWrapperValve[dispatcherServlet]: Servlet.service() for servlet dispatcherServlet 抛出异常 java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectWriter.forType(Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/ObjectWriter; 在 org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:264) 在 org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:100) 在 org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:225) 在 org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:173) 在 org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:130) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 在 org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:295) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 在 org.tukey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 在 org.tukey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 在 org.tukey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 在 org.tukey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 在 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 在 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 在 org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) 在 com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 在 org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) 在 org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) 在 org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 在 org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 在 org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 在 org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 在 org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 在 java.lang.Thread.run(Thread.java:745) 严重:PWC6117:找不到文件“null”

我的 spring 配置文件已经设置好了:

<mvc:annotation-driven />
<tx:annotation-driven />

我正在使用 spring 4.3.0 和 hibernate 4.3.11

jackson-annotations-2.7.0.jar

jackson-core-2.7.0.jar

jackson-databind-2.7.0.jar

javax.el-2.2.4.jar

javax.el-api-2.2.4.jar

实体表已经配置jackson:

@Entity
@Table(name = "body_measure", catalog = "faddistwardrobedb")
public class BodyMeasure implements java.io.Serializable {
    @ManyToOne(fetch = FetchType.LAZY)
    @JsonBackReference
    @JoinColumn(name = "ud_id")
    private UserDetail userDetail;
    //etc....
}

@Entity
@Table(name = "user_detail", catalog = "faddistwardrobedb")
public class UserDetail implements java.io.Serializable {

    @JsonManagedReference
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "userDetail")
    //etc.....
}

我错过了什么?还是图书馆相互冲突? 谢谢。

【问题讨论】:

  • 这部分堆栈跟踪:警告:StandardWrapperValve[dispatcherServlet]:Servlet.service() for servlet dispatcherServlet throw exception java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectWriter.forType(Lcom /fasterxml/jackson/databind/JavaType;) 让我相信另一个版本的 jackson-databind 正在被引入,因为这个方法在 v2.5 之前不存在。你说你用的是v2.7,应该有这个方法。可能发生的情况是 spring 或 hibernate 依赖于 jackson-databind

标签: java json spring hibernate spring-mvc


【解决方案1】:

找到了解决方案,但不知道具体出了什么问题。 我的解决方案: 玻璃鱼 4.1 -> 玻璃鱼 4.1.1 重新编译运行,问题解决。 希望能帮助遇到同样错误的人。

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多