Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Rest客户端使用的Json序列化程序上设置特定格式的表示?_Java_Json_Rest_Microprofile - Fatal编程技术网

Java 如何在Rest客户端使用的Json序列化程序上设置特定格式的表示?

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注释属性,结果相同 还

如何在Rest客户端使用的Json序列化程序上设置特定格式的表示

我有一项服务需要一年一个月的输入,格式为ISO 8601“YYYY-MM”。服务器端工作正常,响应格式正确,但实现起来很容易

我使用的是MicroProfile Rest客户端,实体属性定义为
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

1.首先,您需要启用Jackson,因为RESTEasy默认为JSONB。为此,您需要添加此系统属性

  • 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(类类型){
返回映射器;
}
}