假设我有这样一个Java类:
package com.example;
public class PersonUtil {
static class Person {
LocalDate dob;
String name;
Person(LocalDate dob, String name) { this.dob = dob; this.name = name;}
}
public static Person person() {
return new Person(LocalDate.now(), "bob");
}
}
然后我有了common。功能
文件如下:
@ignore
Feature:
Scenario:
* def personUtil = Java.type('com.example.PersonUtil')
然后是这样的test.feature
文件:
Feature: Create Person
Background:
* def util = call read('common.feature')
* print util.personUtil.person();
问题是功能文件中的dob字段看起来像以下结构:
{"dob": {"year":2019,
"month":"MAY",
"monthValue":5,
"dayOfMonth":1,
"leapYear":false,
"dayOfWeek":"WEDNESDAY",
"dayOfYear":121,
"era": "CE",
"chronology": {
"id":"ISO",
"calendarType":"iso8601"
}},
"name":"bob"}
但是我希望它使用DateFormatter,这样输出就
{"dob": "2019-05-1", "name":"bob"}
有没有一种方法可以在不创建另一个DTO和自己进行LocalDate格式化的情况下使用空手道做到这一点?
@Peter Thomas,谢谢,这确实有效,但它让我思考了更多,我最终做的是重用ObjectMapper的一个UTIL将对象序列化为JSON(ObjectMapper处理所有类型转换)。然后,我将调用包装为使用serialise函数获取Java对象,并将结果转换回功能文件中的json,如下所示:
和以前一样,但有新的序列化
助手:
package com.example;
public class PersonUtil {
static class Person {
LocalDate dob;
String name;
Person(LocalDate dob, String name) { this.dob = dob; this.name = name;}
}
public static Person person() {
return new Person(LocalDate.now(), "bob");
}
public static String serialise(Object o) throws JsonProcessingException {
return ObjectMapperUtils.createObjectMapper().writeValueAsString(o);
}
}
类似于以前,但现在包装调用与序列化
助手:
Feature: Create Person
Background:
* def util = call read('common.feature')
* json person = util.personUtil.serialise(util.personUtil.person());
* print person
这样,我就不需要为每种需要特殊转换的Java对象类型做新的映射。
是的,试试这个:
* def mapper = function(x){ return { name: x.name, dob: x.dob.toString() } }
* def person = mapper(util.personUtil.person())
* print person
从上面来看,你应该很容易弄清楚如何进行任何类型的转换。
根据这个答案:https://stackoverflow.com/a/43342675/5810648 我编写了这样的序列化程序: 如果注释存在并且字段为,则Witch应该编写字符串“N/A”。但是方法仅对非空字段调用。 此外,我还尝试调用setNullValueSerializer: 有了这样的实施: 但没有结果。 如何以这种方式处理空字段? 使现代化 根据讨论:https://github.c
问题内容: 我正在尝试创建将影响序列化值的自定义杰克逊注释。 含义: 现在序列化对象X(10)将导致: 我该如何实现? 问题答案: 结果:
问题内容: 根据这个答案:http://codingdict.com/questions/137507 我写了这样的序列化器: 如果注释存在且字段为,则女巫应该写字符串“ N / A” 。但是仅对非空字段调用方法。 另外,我尝试致电: 通过这样的实现: 但是没有结果。 如何以这种方式处理空字段? 更新资料 根据讨论:https : //github.com/FasterXML/jackson- d
问题内容: 我有一个对象,其中包含一些要序列化的不可序列化字段。它们来自我无法更改的单独API,因此使它们可序列化不是一种选择。主要问题是Location类。它包含我需要的四个可以序列化的东西,所有整数。如何使用read / writeObject创建可以执行以下操作的自定义序列化方法: 我怎样才能做到这一点? 问题答案: Java支持自定义序列化。阅读“自定义默认协议”部分。 去引用: 但是,有
我试图创建会影响序列化值的自定义jackson注释。 意思是: 现在序列化对象X(10)将导致: 我怎样才能做到这一点?
对于Jackson的序列化,定义自定义bean为空的正确方法是什么? 我想用Json过滤不需要的字段- 目前,如果属于自定义bean的所有变量都为null,我有一个额外的方法将null值分配给它。我在寻找的是,这是否可以由杰克逊来完成。 内容识别类 预期产量 和 电流输出 和