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

spring Rest Jackson with lombok return字段具有默认值

秦浩漫
2023-03-14

我正在开发一个基于spring boot的rest web服务,我使用lombok来生成getter和setter,但是当我调用我的web服务时,我得到了一个带有默认值null的对象,这是我的代码:

我的实体 :

@Data
@Entity
@JsonAutoDetect(fieldVisibility = Visibility.ANY)
public class Projet implements Serializable {
    /**
     *  Serial UID
     */
    private static final long serialVersionUID = -7268509549664338191L;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long codeProjet ;
    private String description;
    private String responsable ;
    private Double budget ;
    private Date dateDebut;
    private Date dateFin ;
    @OneToMany(mappedBy="codeQuestonnaire")
    @JsonIgnore
    private List<Questionnaire> questionnaires ;

}

这是我的Rest服务:

@RestController
public class ProjectResource {

    @Autowired
    private ProjetRepository projetRepository ;

    @GetMapping("/projet/{id}")
    public ResponseEntity<Projet> getProjet(@PathVariable("id") long id){
        Projet projet = projetRepository.getOne(id);
        if(projet!=null) {
            return new ResponseEntity<Projet>(projet,HttpStatus.OK);
        }else {
            return new ResponseEntity<Projet>(HttpStatus.NOT_FOUND);
        }

    }
}

在我的配置文件中,我添加了以下行:

spring.jackson.serialization.fail-on-empty-beans=false

当我呼叫我的服务时,我得到以下响应:

{"codeProjet":null,"description":null,"responsable":null,"budget":null,"dateDebut":null,"dateFin":null,"handler":{},"hibernateLazyInitializer":{}}

如果我在我的类中添加了getters和setters,它就能正常工作,我会得到json的值响应,提前感谢任何帮助

共有3个答案

司马耘豪
2023-03-14

解决问题是我使用HikariCp默认连接池,而没有在属性文件中添加所需的配置。

房学
2023-03-14

只需将< code>getOne方法替换为< code>findById(对于Spring Boot 1.5版,则为< code>findOne)。

方法getOne返回对实体(其代理)的引用,而不是实体。

有关详细信息,请参阅此处。

双弘益
2023-03-14

我想你遇到了和这里一样的问题没有为类找到序列化程序org.hibernate.proxy.pojo.javassist.Javassist?.

不要配置< code > spring . Jackson . serialization . fail-on-empty-beans = false ,而是用< code > @ jsonignoreproperproperties({ " hibernateLazyInitializer "," handler"})来注释您的实体。

 类似资料:
  • 我不明白为什么我应用程序会删除异常“字段'ID_Employeer'没有默认值”。 是我的主键,当我试图将任何信息保存到我的数据库时,我得到了这个异常,但是,当我只是试图从DB读取信息时,它是正常的。 我读了关于StackOverflow的主题,但我仍然不明白我应用程序中的答案。我正在使用Hibernate5.2.11。 我的: 我的冬眠: 下一个CharacterInfo类 主类 最后例外

  • 问题内容: 我面对的是Hibernate遇到的一个简单问题,但无法解决(无法访问的Hibernate论坛当然无济于事)。 我有一个简单的课程想继续学习,但是请继续学习: 持久化类的相关代码为: 实际的运行代码很简单: 我在注解中尝试了一些“策略”,但似乎不起作用。初始化也无济于事!(例如)。 谁能给我一些启示? 编辑2: 确认:不能解决问题 求助: 重新创建数据库解决了问题 问题答案: 有时,即使

  • 问题内容: 我收到一条错误消息: 每个人都可以帮助我吗?我的数据库字段不为空。但我想得到这个结果: 并且 两者都成功(在客户端中都是成功,但是在Java代码中是error,错误代码位于标题的顶部),而不是false;我的mysql jar是mysql-connector- java-5.0.8 问题答案: 该错误是不言自明的。您的列没有默认值。因此,在插入期间,mysql无法找出要在列中插入的内容

  • 问题内容: 我在设置Avro字段的默认值时遇到了一些问题。我有一个简单的架构,如下所示: data.avsc: 我正在使用 avro-maven-plugin v1.7.6 生成Java模型。 当我使用:创建模型的实例时 ,它会失败并出现以下异常: org.apache.avro.AvroRuntimeException:org.apache.avro.AvroRuntimeException:字

  • 我在设置Avro字段的默认值时遇到了一些问题。我有一个简单的模式,如下所示: 数据avsc: 我使用的是avro maven插件v1。7.6生成Java模型。 当我使用:创建模型的实例时,它会失败,但有一个异常: org.apache.avro.AvroRuntimeExc0019:org.apache.avro.AvroRuntimeExc0019:字段id类型: UNION pos: 0未设置

  • 所以我有一个这样的avro记录(称之为v1): 我想添加一个区分大小写的字段,默认值为false(称为v2)。我的第一种方法是: 根据模式演变,这是向后和向前兼容的,因为具有新模式的读取器读取用旧写入器模式编码的记录将能够填充此字段默认值和具有旧模式的读取器将能够读取用新写入器模式编码的记录,因为它只会忽略新添加的字段。 添加此字段的另一种方法是添加默认值为null的