如何根据一个简单的模式(如"dd-MM-yyyy")让杰克逊序列化我的Joda DateTime对象?
我试过了:
@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
ObjectMapper mapper = new ObjectMapper()
.getSerializationConfig()
.setDateFormat(df);
Run Code Online (Sandbox Code Playgroud)
谢谢!
我在Spring Boot Application中格式化Java 8 LocalDateTime时遇到了一个小问题.使用"正常"日期我没有问题,但LocalDateTime字段转换为以下内容:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我想将其转换为:
"startDate": "2015-01-01"
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
return startDate;
}
Run Code Online (Sandbox Code Playgroud)
但是上述任何一个注释都不起作用,日期会像上面那样被格式化.建议欢迎!
我的目标是配置objectMapper它只序列化带注释的元素@JsonProperty.
为了做到这一点,我按照这个解释说明了如何配置对象映射器.
我在这里描述了自定义objectmapper .
但是,当NumbersOfNewEvents序列化类时,它仍然包含json中的所有属性.
有人有提示吗?提前致谢
杰克逊1.8.0春季3.0.5
CustomObjectMapper
public class CompanyObjectMapper extends ObjectMapper {
public CompanyObjectMapper() {
super();
setVisibilityChecker(getSerializationConfig()
.getDefaultVisibilityChecker()
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
.withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.DEFAULT));
}
}
Run Code Online (Sandbox Code Playgroud)
servlet.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="de.Company.backend.web" />
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
</list>
</property>
</bean>
<bean id="jacksonObjectMapper" class="de.Company.backend.web.CompanyObjectMapper" />
</beans>
Run Code Online (Sandbox Code Playgroud)
NumbersOfNewEvents
public class …Run Code Online (Sandbox Code Playgroud) 我是Spring Data REST项目的新手,我正在尝试创建我的第一个RESTful服务.任务很简单,但我被困住了.
我想使用RESTful API对存储在嵌入式数据库中的用户数据执行CRUD操作.
但我无法弄清楚如何使Spring框架处理birthData为"1999-12-15"并将其存储为LocalDate.@JsonFormat注释没有帮助.
目前我收到错误:
HTTP/1.1 400
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 24 Aug 2017 13:36:51 GMT
Connection: close
{"cause":{"cause":null,"message":"Can not construct instance of java.time.LocalDate:
no String-argument constructor/factory method to deserialize from String value ('1999-10-10')\n
at [Source: org.apache.catalina.connector.CoyoteInputStream@4ee2a60e;
line: 1, column: 65] (through reference chain: ru.zavanton.entities.User[\"birthDate\"])"},
"message":"JSON parse error: Can not construct instance of java.time.LocalDate:
no String-argument constructor/factory method to deserialize from String value ('1999-10-10'); nested exception is com.fasterxml.jackson.databind.JsonMappingException:
Can not construct instance of java.time.LocalDate: no String-argument …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Jackson对JSON进行序列化和反序列化对象(marshall/unmarshall).其中一些对象具有Java 8 LocalDate和ZonedDateTime.我在这里读到最好的选择是使用jackson-datatype-jsr310
使用Jackson JSON映射器序列化/反序列化java 8 java.time
但是,当我尝试使用它时:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
java.lang.IllegalAccessError: tried to access method com.fasterxml.jackson.databind.ser.std.StdSerializer.<init>(Ljava/lang/Class;)V from class com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
Run Code Online (Sandbox Code Playgroud)
任何线索?我正在使用Jackson 2.6.0,jackson-datatype-jsr310 2.6.0并且正在部署到Tomcat 8.
谢谢和最好的问候
我有一个包含java.time.LocalDateTime的基本POJO:
package foo.bar.asire.api.model;
import java.time.LocalDateTime;
public class Address
{
private Long id;
private Integer houseNumber;
private String address;
private LocalDateTime created;
public Address()
{
super();
}
public Address(Long id, Integer houseNumber, String address, LocalDateTime created)
{
super();
this.id = id;
this.houseNumber = houseNumber;
this.address = address;
this.created = created;
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public Integer getHouseNumber()
{
return houseNumber;
}
public void setHouseNumber(Integer houseNumber)
{
this.houseNumber = …Run Code Online (Sandbox Code Playgroud) 我有swagger 2.8.0,我的 POJO 类如下,
public class Item {
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate date;
@JsonFormat(pattern="HH:mm")
private LocalTime time;
// other fields and Getters and Setters are omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
现在在 swagger-ui 的示例值部分,我的 POJO 模型显示为
{
"date": "string",
"time": {
"hour": 0,
"minute": 0,
"nano": 0,
"second": 0
}
}
Run Code Online (Sandbox Code Playgroud)
如何在 swagger-ui 中将 LocalTime 显示为字符串?
背景
{
"markdownPercentage": 20,
"currency": "SEK",
"startDate": "2019-07-25"
}
Run Code Online (Sandbox Code Playgroud)
{
"markdownPercentage": 20,
"currency": "SEK",
"startDate": "2019-07-25"
}
Run Code Online (Sandbox Code Playgroud)
问题
当应用程序尝试将消息反序列化到对象时,它会引发以下异常
public class Markdown {
@JsonProperty("markdownPercentage")
@NotNull
private Integer markdownPercentage = 0;
@JsonProperty("currency")
@NotNull
private String currency = "";
@JsonFormat(
shape = Shape.STRING,
pattern = "yyyy-MM-dd"
)
@JsonProperty("startDate")
@NotNull
private ZonedDateTime startDate;
// Constructors, Getters, Setters etc.
} …Run Code Online (Sandbox Code Playgroud) 使用Dropwizard框架构建API,我使用了fastxml jackson ObjectMapper来解决这个反序列化问题.我正在使用Joda Time和Joda Money.对于Joda Time,定义JodaModule足以解决反序列化问题.但是对于Joda Money来说,JodaModule还不足以解决反序列化问题(如果我错了,请纠正我).所以,保持JodaModule为Joda Time,我已经创建了Joda Money特定的解串器.
public class JodaMoneyDeserializer extends JsonDeserializer<Money> {
@Override
public Money deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
String text = parser.getText();
return Money.parse(text);
}
}
Run Code Online (Sandbox Code Playgroud)
对于产品型号,我为Money添加了反序列化器.如果我需要定义其他任何内容,请告诉我.
public class Product {
...
private Money price;
...
...
@JsonDeserialize(using=JodaMoneyDeserializer.class)
public void setPrice(Money price) {
this.price = price;
}
...
}
Run Code Online (Sandbox Code Playgroud)
这将尝试仅解析"{"并将抛出错误.
任何提示都非常感谢.
如果您需要其他信息,请告诉我们.
谢谢!
**更新**以下是JSON示例.
{
"id": 15,
"productTypeId": 1,
"code": "XYZK",
"name": "PRODUCT - XYZK",
"status": true,
"visible": true,
"createdAt": 1400572157000,
"updatedAt": …Run Code Online (Sandbox Code Playgroud) 我有机票舱位:
data class Ticket(
var contact_email : String? = null,
var date_opened : LocalDateTime? = null
)
Run Code Online (Sandbox Code Playgroud)
但是从字符串读取时出现错误:
引起原因:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例
java.time.LocalDateTime(没有创建者,如默认构造一样,存在):没有从字符串值反序列化的字符串参数构造函数/工厂方法('2017-11-13T06 :40:00Z'),网址为[来源:UNKNOWN; 行:-1,列:-1](通过参考链:rnd_classifier.model.Ticket [“ date_opened”])
我尝试添加注释没有成功:
data class Ticket(
var contact_email : String? = null,
@JsonSerialize(using = ToStringSerializer::class)
@JsonDeserialize(using = LocalDateTimeDeserializer::class)
var date_opened : LocalDateTime? = null
)
Run Code Online (Sandbox Code Playgroud)
如何解决?
我要放弃了。我已经浏览了所有可能的 SO 页面,但我无法让它工作。
我有一个ConfigKeyVal这样的课程:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ConfigKeyValue {
private String name;
private NssConfigDto value;
}
Run Code Online (Sandbox Code Playgroud)
凡Config类如下所示:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Config {
private String name;
private String source;
private String destination;
private int cycle;
private LocalDateTime fixedTime;
private LocalDateTime submitDate;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将ConfigKeyVal(顶部的)对象的JSON 数组直接反序列化到我的 ArrayList 中。
public class ConfigKeyValueList extends ArrayList<ConfigKeyValue> {
public ConfigKeyValueList() {
super();
}
}
Run Code Online (Sandbox Code Playgroud)
像这样:
final Data values = …Run Code Online (Sandbox Code Playgroud) java ×9
jackson ×8
json ×8
spring-boot ×4
java-8 ×2
data-class ×1
java-time ×1
jodatime ×1
kotlin ×1
localdate ×1
maven ×1
rest ×1
spring ×1
spring-kafka ×1
swagger ×1
swagger-2.0 ×1
swagger-ui ×1