我正在尝试将旧的EJB服务(其中的逻辑)包装在一个微服务中。我使用Quarkus/RESTEasy实现此微服务
但是,我在自定义序列化/反序列化时遇到问题。
问题:无法构造com.vividsolutions.jts.geom的实例。Geometry
,这让我相信Jackson并不认为Geometry是要解析为String的类。这让我相信对象映射器没有被拾取。。
注1:我可以在Quarkus日志中提供的日志语句中看到:自定义ObjectMapper,添加几何序列化器/反序列化器
注2:单元测试在RegisterGeometryMapper
上运行良好。
这是我要解析的JSON(注:几何是GeoGSON)
{
"geometry": {
"type": "Point",
"coordinates": [
134750,
477800,
3.18
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:28992"
}
}
},
"date": 1612519294297
}
这是REST资源方法:
@POST
@Path( "/etrs89-transformation" )
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
TransformationResult transformToEtrs89(@NotNull @Valid TransformationRequest request);
及其请求DTO:
public class TransformationRequest {
@NotNull private Geometry geometry;
private Date date;
}
这是我注册的制图员。
@Singleton
public class RegisterGeometryMapper implements ObjectMapperCustomizer {
private static final Logger LOG = Logger.getLogger( RegisterGeometryMapper .class );
public void customize(ObjectMapper mapper) {
LOG.debug( "customizing ObjectMapper, adding geometry serializer / deserializer." );
SimpleModule module = new SimpleModule();
module.addDeserializer( Geometry.class, new GeometryDeserializer() );
module.addSerializer( Geometry.class, new GeometrySerializer() );
mapper.registerModule( module );
}
public static class GeometryDeserializer extends StdDeserializer<Geometry> {
private final GeoJsonReader reader = new GeoJsonReader();
public GeometryDeserializer() {
this( Geometry.class );
}
public GeometryDeserializer(Class<Geometry> vc) {
super( vc );
}
@Override
public Geometry deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree( jp );
String geoGson = node.toString();
try {
return reader.read( geoGson );
}
catch ( ParseException ex ) {
throw new IOException( ex );
}
}
}
public static class GeometrySerializer extends StdSerializer<Geometry> {
private final GeoJsonWriter writer = new GeoJsonWriter();
protected GeometrySerializer() {
this( Geometry.class );
}
protected GeometrySerializer(Class<Geometry> t) {
super( t );
}
@Override
public void serialize(Geometry geometry, JsonGenerator jgen, SerializerProvider serializerProvider) throws IOException {
jgen.writeRawValue( writer.write( geometry ) );
}
}
}
编写器/读取器源自 jts io。
<!-- GeoJson -->
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts-io</artifactId>
<version>1.14.0</version>
</dependency>
此外:我一直在使用jts(由于传统原因,无法迁移到更新的版本-locationtech,JBOSS EAP被困在不支持locationtech的Hibernate上)。
上面的解决方案是正确的,有效的。
问题是我在代码的其他地方添加了:
@Provider
public class JacksonConfig implements ContextResolver<ObjectMapper> {
private final ObjectMapper objectMapper;
public JacksonConfig() throws Exception {
objectMapper = new ObjectMapper();
objectMapper.enable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS );
}
@Override
public ObjectMapper getContext(Class<?> arg0) {
return objectMapper;
}
}
这将创建一个新的ObjectMapper
,并撤消我在@Singleton
class中所做的任何操作。
我遇到了一个最奇怪的问题,我就是无法理解。我的网络api使用Spring Boot和postgresql/postgis,在尝试从数据库中读取几何图形时出现了不一致的错误。我已经使用这段代码很多很多年了(当然偶尔会进行修改),这是我上一次发布时才开始发生的。 我在ubuntu 18.04上使用openjdk 11.0.4 2019-07-16 Releventspom.xml条目… 我从以下类型的
我是在resteasy-reactive项目时得到消息的。 (Build-70)[IO.Quarkus.Resteasy.Common.Deployment.ResteasyCommonProcessor]空:Quarkus检测到需要Mutiny响应编程支持,但quarkus-resteasy-mutiny扩展不存在。我使用了夸克斯-雷斯特阿西-反应-jackson,并有以下的依赖关系。 根据我的
我有一个客户机包,其中定义了我的REST客户机,包含以下接口和模型: 编辑: 我使用的是quarkus-rest-client-jackson和quarkus-rest-client依赖项,任何地方都没有jsonb依赖项。 我试图缩小这个问题的范围:我已经将客户机/请求类移到我的主包中,并且我已经删除了lombok注释,并将我的具有Jackson注释的字段公之于众。还是同样的问题...谁能指出我做
测试quarkus应用程序,使用我的restendpoint/初始化 已安装的功能:[cdi,resteasy,resteasy-jackson] 我发现当应用程序以java(非本机)形式运行时,请检查http://localhost:8080/init 它将得到空结果:http://localhost:8080/init 杰克逊是这样配置的: 也不例外。 以java形式运行时,编译quarkus
我在通过邮递员传递json数据时遇到问题。如果Mandetory日期带有注释,没问题。另一个日期接受null。但是在更新时,该日期会产生问题。我使用Java1.8与Spring启动 以下链接我已经访问过,但不适合这个。杰克逊JSON解析错误的LocalDateTime解析:无法构造java.time.LocalDate的实例:没有String参数构造函数/工厂方法从String值反序列化https
我正在尝试实现一个日志过滤器来记录对Quarkus应用程序APIendpoint的请求和响应。我正在使用Quarkus 1.13.3。最终和quarkus resteasy反应。在调用非阻塞endpoint时,尝试记录请求主体时遇到问题。这是我用来记录请求的代码: 当我调用具有@Blocking注释的APIendpoint时,这可以正常工作,但当我调用非阻塞API时,会出现以下错误: 有没有办法绕