我有时区POJO如下:
@Entity
public class TimeZoneDto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "timezone_sequence")
@SequenceGenerator(name = "timezone_sequence", sequenceName = "t_timeZone_master_id_seq", initialValue = 1, allocationSize = 1)
private Long id;
@Column
private String timeZone;
@Column
private String name;
@Column
private double hourDifference;
/* all gettet/setter */
}
我在Spring Controller中有如下updateTimeZone方法:
@RequestMapping(value = "updateTimezone", consumes = "application/json", produces = "application/json", method = RequestMethod.POST)
public ResponseEntity<Object> updateTimezone(@RequestBody TimeZoneDto timeZoneDto){
}
当我通过以下请求时:
{"id":14,"name":"America/Los_Angeles -7:00 GMT"}
然后,当映射到POJO时,它会自动将其他值转换为默认值,并变为:
id=14, timeZone=null, name=America/Los_Angeles -7:00 GMT, hourDifference=0.0
因此,当我如下更新此POJO时
getEntityManager().merge(timezoneDto);
它自动覆盖TimeZone=null和小时差异=0.0,
那么有没有什么方法可以让我在@Request estbody中的TimeZoneDto只包含我在请求JSON中传递的那些列。
编辑
我在课堂上使用过下面的内容,但它不起作用
@JsonInclude(value=Include.NON_EMPTY)
OR
@JsonInclude(value=Include.NON_DEFAULT)
这是一种经典模式,首先需要从存储库中提取时区实体,然后将传入的JSON数据与现有记录数据合并。
public ResponseEntity<Object> updateTimeZone(@RequestBody TimeZoneDto dto) {
final TimeZone timeZone = timeZoneRepository.findById( dto.getId() );
// use object mapper or whatever and merge dto onto timeZone
timeZoneRepository.saveOrUpdate( timeZone );
return timeZone;
}
我认为问题出在您的设计上。您将实体与DTO混合在一起。一个最常用的解决方案是将这两层分开。您可以有一个通用界面,例如TimeZoneInfo
,然后有两个实现
然后,您可以将时区设置为请求主体,并将该对象调整为时区属性(即获取所需值并设置为实体)。在调整此DTO之前,您可能需要从DB中获取时区属性。我想说最好是在服务/委托类中,而不是在rest控制器中。
我使用Java和Jackson库将JSON文件解析为Java类。我的问题是,如果值为null或空,我无法设置默认值。有可能吗?现在,我只是把它写在setters部分。 例如,我有一个JSON文件 在我的Java类中,如果值为null或空,我想将其设置为Java函数。 举个例子 所以,如果设置了这个值,那么就是它。如果不是,那应该是美国。
我有以下一个批处理的Spring配置。我在生产批处理中遇到过一个问题,当一个特定的用例抛出一个不可跳过的异常时。当我在集成测试中复制用例时,批处理行为仍然很奇怪。当我的batch.commit-interval属性大于1时,将触发重试机制,回滚未提交的块,并再次处理所有以前的记录。当batch-commit-interval设置为1时,一旦抛出不可跳过的异常,批处理就会失败。 我尝试了batch-
spring-boot-starter-parent 2.4.1 spring-boot-starter-data-jpa postgres 12.5 一个实体的简短摘录: 该实体生成一个表,如下所示: 就是这样: 我们可以看到: null 问题 > 我想防止任何人设置Null,就像在branch1中那样。 如果我这样组织它: @columnDefinition=“varchar(255)defa
我有这样基于方面的日志记录: 当我使用RequestBody执行请求时,它工作正常,会触发advice。但是,当我执行没有
我读过许多类似的问题,包括:JQuery、Spring MVC@RequestBody和JSON——使其能够将JSON请求与JQuery/Ajax与Spring一起工作 要求是服务器只会接受应用程序/json类型。我使用的是Spring MVC控制器。代码通过@响应体以JSON形式发送响应。我想通过我的Spring MVC控制器中的@Request estbody获取信息。我正在使用JSP将JSO
伙计们!我正在开发一个web应用程序,我决定使用Jackson作为JSON处理框架。 我愿意发送请求数据;假设POJO看起来像这样: 将其序列化如下: 但是我需要向该对象添加一些元数据,比如字段和。我以为会解决我的问题,但是我正在使用Jackson和泽西一起使用,所以我没有手动序列化对象,所以我不能使用。 我知道这个线程,但是没有一个答案可以满足我的需求,因为我认为,编写一个自定义序列化程序是有点