Java 如何在Rest客户端使用的Json序列化程序上设置特定格式的表示?
如何在Rest客户端使用的Json序列化程序上设置特定格式的表示 我有一项服务需要一年一个月的输入,格式为ISO 8601“YYYY-MM”。服务器端工作正常,响应格式正确,但实现起来很容易 我使用的是MicroProfile Rest客户端,实体属性定义为Java 如何在Rest客户端使用的Json序列化程序上设置特定格式的表示?,java,json,rest,microprofile,Java,Json,Rest,Microprofile,如何在Rest客户端使用的Json序列化程序上设置特定格式的表示 我有一项服务需要一年一个月的输入,格式为ISO 8601“YYYY-MM”。服务器端工作正常,响应格式正确,但实现起来很容易 我使用的是MicroProfile Rest客户端,实体属性定义为java.util.YearMonth 当我希望该请求是格式化字符串时,将使用表示为对象的序列化JSON year MOUNT属性发送该请求 已尝试使用JsonFormat、JsonbDateFormat和@Schema注释属性,结果相同 还
java.util.YearMonth
当我希望该请求是格式化字符串时,将使用表示为对象的序列化JSON year MOUNT属性发送该请求
已尝试使用JsonFormat
、JsonbDateFormat
和@Schema
注释属性,结果相同
还尝试添加Jackson Provider(ContextResolver),它适用于服务器端,但在客户端没有更改
testes注释的代码片段:
import com.fasterxml.jackson.annotation.JsonFormat;
导入org.eclipse.microfile.openapi.annotations.media.Schema;
导入javax.json.bind.annotation.JsonbDateFormat;
@JsonFormat(shape=shape.STRING,pattern=“yyyy-MM”)
@JsonbDateFormat(value=“yyyy-MM”)
//我猜是下一个。找不到此的文档。
@模式(type=SchemaType.STRING,实现=YearMonth.class,pattern=“yyyy-MM”)
私人年月参考;
环境:
- 野蝇21
- Java SE 11
- 微文件rest客户端api:2.0
- 微文件openapi:2.0
- resteasy.preferJacksonOverJsonB=true
-Dproperty=value
命令行语法或其他任何语法,添加系统属性作为首选项。在本例中,我们使用WildFly配置(例如standalone.xml):
2.然后您可以将Jackson配置提供程序添加到您的REST客户端界面:
import org.eclipse.microfile.rest.client.annotation.RegisterProvider;
导入org.eclipse.microfile.rest.client.inject.RegisterRestClient;
@RegisterProvider(JacksonConfiguration.class)
@RegisterRestClient
公共接口RestTestService{
//方法。。。
}
现在,Java8日期时间API将被正确序列化,如果需要,您可以使用@JsonFormat
添加自定义格式
另外:这里有一个Jackson配置提供程序的示例,也可以在客户端和服务器端使用:
导入javax.ws.rs.ext.ContextResolver;
导入javax.ws.rs.ext.Provider;
导入com.fasterxml.jackson.databind.DeserializationFeature;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.databind.SerializationFeature;
导入com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
@提供者
公共类JacksonConfiguration实现了ContextResolver{
私有最终对象映射器映射器;
公共插孔配置(){
映射器=新的ObjectMapper();
registerModule(新的JavaTimeModule());
configure(SerializationFeature.WRITE_DATES_作为时间戳,false);
configure(在未知属性上反序列化feature.FAIL,false);
}
@凌驾
公共对象映射器getContext(类类型){
返回映射器;
}
}