当前位置: 首页 > 知识库问答 >
问题:

Spring Boot data rest Jakson JSONSerializer为空

庞元青
2023-03-14

我有一个Spring Boot项目1.3.3版本,已部署到Web Logic 12c应用服务器上。这段代码在嵌入式tomcat上运行良好,但在我部署到Web逻辑上时就不行了。

我有一个Spring数据Rest Repo

@RepositoryRestResource(collectionResourceRel = "car", path = "car")
public interface CarRepo extends PagingAndSortingRepository<Meter, Long>
{
    List<Car> findall();
}

我的车POJO

@Table(name="car")
@Entity
public class Car
{
   @Id
   @Column(name="ID")
   private Long id;

   @Column(name="manufacturer")
   private String manufacturer;

   .......
}

一切都启动了,网页加载了,当我进行rest调用时,我可以看到来自SQL的输出,SQL查询执行良好,但我在服务器日志中发现以下错误:

Java语言lang.AbstractMethodError:com。fasterxml。杰克逊。数据绑定。JsonSerializer。isEmpty(Ljava/lang/Object;)在com。fasterxml。杰克逊。数据绑定。序列号。BeanPropertyWriter。serializeAsField(BeanPropertyWriter.java:528)

我假设数据rest试图自动将JSON响应从endpoint映射到Car对象,但由于未知原因,它失败了。

我从下面的链接中看到,我知道Spring data rest使用的Spring Hateoas存在问题,但由于我使用的是最新版本的Spring data rest,所以这应该不是问题。

Springhateoas错误

任何帮助都将不胜感激

共有2个答案

闾丘谦
2023-03-14

好的,解决方案是我必须在weblogic中特别告诉weblogic。xml加载com。fasterxml。jackson从应用程序中打包,而不是从它自己的容器中打包。

<wls:package-name>com.fasterxml.jackson.*</wls:package-name>

完整weblogic。xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                                          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd 
                                          http://xmlns.oracle.com/weblogic/weblogic-web-app 
                                          http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
    <wls:weblogic-version>12.2.1</wls:weblogic-version>
    <wls:context-root>/ws/car</wls:context-root>
    <wls:container-descriptor>
        <wls:prefer-application-packages>
            <wls:package-name>org.slf4j.*</wls:package-name>
            <wls:package-name>javax.persistence.*</wls:package-name>
            <wls:package-name>org.springframework.*</wls:package-name>
            <wls:package-name>com.fasterxml.jackson.*</wls:package-name>
        </wls:prefer-application-packages>
    </wls:container-descriptor> </wls:weblogic-web-app>

希望这对其他人有帮助。

沃威
2023-03-14

这看起来像是JsonSerializer类的版本不匹配问题。我认为您的weblogic类加载器正在加载com.fasterxml.jackson.core的旧版本:jackson-datind,其中类JsonSerializer没有is空方法。

来自文档:

/**
 * Method called to check whether given serializable value is
 * considered "empty" value (for purposes of suppressing serialization
 * of empty values).
 *<p>
 * Default implementation will consider only null values to be empty.
 * 
 * @since 2.0
 */
public boolean isEmpty(T value) {
    return (value == null);
}
 类似资料:
  • 问题内容: 我有Ubuntu 10.10和apache2,php 5.3.3-1和mysql 5.1。 我正在通过URL向页面传递一些值。在该页面上,如果我这样做了,那么我会看到数组的内容。但是,如果我这样做数组是空的。任何想法为什么会这样? 问题答案: 也可以尝试检查php.ini中的“ request_order” 选项:

  • 我的问题是无法使用和获取文本字段。我尝试使用XPath来选择对象,但没有成功。 这是我的代码: 我重新提出这个问题是因为旧的问题有点让人困惑,我想。这是旧的 XML形式的我的文档(Document.getXML()) 我需要选择文本字段,做一个邮件合并,我的计划将是复制和移动字段。如果有更好的方法,我愿意尝试一下:)

  • 正如您将看到的,当涉及到Java和JavaFX时,我是一个大傻瓜。我花了很多时间四处阅读(各种论坛帖子和tuts)并试图弄清楚我自己是从哪里得到这个问题的,但它已经到了我发帖从一个了解他们的业务的人那里得到反馈的地步。 在回复的时候,请你花点时间解释一下为什么有些东西不能工作,以及一些一般性的指示?这里是我到目前为止所拥有的(我的FXML和我的两个类)任何指针都将是美妙的!! 我的FXML; 现在

  • 问题内容: 在Java代码中执行空检查时,如果您为空值抛出IllegalArgumentExceptions,那么您将使用哪种消息模板? 我们倾向于使用这样的东西 哪个更好:“ is null”或“ was null”,为什么? 对我来说,“是空的”感觉更自然。 问题答案: 由于由于失败的前提条件检查而引发,因此,我认为除了陈述事实以外,还应说明已违反的 要求 。 就是说,而不是说。 关于使用库进

  • 问题内容: 无法使用XMLHttpRequest获取数据(状态0,responseText为空): 它警告“状态0”。 与localhost请求的情况相同(cd_catalog.xml保存为本地文件) 但是使用本地主机IP请求 并与本地文件请求 一切正常(状态200) 什么会导致在线请求出现问题(状态= 0)? PS:Live HTTP标头显示在所有4种情况下一切正常: PS2:VMWare上的A

  • 我有以下测试WebAPI代码,我没有在生产中使用WebAPI,但我之所以这样做是因为我讨论了这个问题:WebAPI异步问题 不管怎样,下面是冒犯的WebAPI方法: 因此,我认为第二个异常是预期的,因为当完成时,它很可能位于另一个线程上,其中作为线程静态变量将不再解析为适当的值。现在,基于同步上下文,它实际上可以在await之后被强制返回到相同的线程,但我在测试中没有做任何花哨的事情。这只是对的简

  • 问题内容: 我正在运行,并且在.htaccess文件中执行了以下操作: 如果我在PHP文件中打印出变量,则会得到一个空数组。为什么我的环境变量没有出现在这里?为什么首先是空的? 我确实找到了变量,但是它出现在变量中。由于某种原因,它出现了两次。为什么是这样? 看来我可以使用来获得它,所以也许我应该只使用它。但是我仍然对造成这种情况的原因有些好奇。这是Windows问题吗?还是发生了什么事? 问题答

  • 问题内容: 我想将表列更改为可为空。我用过了: 这会导致出现错误。正确的语法是什么? 问题答案: 假设(基于您之前的问题): 用您的实际数据类型替换。