2017-04-06 5 views
0

Je suis en train d'enregistrer l'image à la base de données, mais j'obtiens l'erreur:Jackson blob exception

org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.sql.Blob, problem: abstract types can only be instantiated with additional type information 
at [Source: [email protected]; line: 1, column: 27] (through reference chain: com.soul.seeker.models.Post["postImage"]) 
     at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163) 
     at org.codehaus.jackson.map.deser.StdDeserializationContext.instantiationException(StdDeserializationContext.java:233) 
     at org.codehaus.jackson.map.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:60) 
     at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299) 
     at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414) 
     at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697) 
     at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580) 
     at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732) 
     at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863) 
     at com.soul.seeker.serviceImpl.PostServiceImpl.createPostImage(PostServiceImpl.java:121) 
     at com.soul.seeker.Application.lambda$main$8(Application.java:142) 
     at spark.ResponseTransformerRouteImpl$1.handle(ResponseTransformerRouteImpl.java:47) 
     at spark.http.matching.Routes.execute(Routes.java:61) 
     at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:130) 
     at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50) 
     at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189) 
     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
     at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119) 
     at org.eclipse.jetty.server.Server.handle(Server.java:517) 
     at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308) 
     at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242) 
     at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261) 
     at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) 
     at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75) 
     at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213) 
     at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147) 
     at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) 
     at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) 
     at java.lang.Thread.run(Thread.java:745) 

classe Pojo:

public class Post{ 

    private String post_id; 
    private String title; 
    private String details; 
    private String username; 
    private String userImage; 
    private String url; 
    private List categories; 
    private String created_at; 
    private Blob postImage; //BLOB TYPE 
    private String postImageName; 

    //getters setters 
} 

classe de mise en œuvre:

@Override 
    public void createPostImage(Request request) { 
     try { 
      ObjectMapper mapper = new ObjectMapper(); 
      Post createPostImage = mapper.readValue(request.body(), Post.class); 
      System.out.println("CREATE POST IMAGE" + createPostImage); 
     } catch (IOException ex) { 
      Logger.getLogger(PostServiceImpl.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

regardé en ligne pour messages similaires, mais n'a pas pu trouver de prospects. Comment puis-je réparer ça? Il est dit abstract types can only be instantiated with additional type information. Quelles sont les informations supplémentaires que je dois passer ici?

Répondre

2

Je ne suis pas sûr de la méthode que vous essayez de télécharger un fichier, mais je suis sûr que ce n'est pas la méthode "recommandée" lorsque vous travaillez avec Spark. Selon la documentation, vous devez lire le fichier en tant que flux et utiliser le request.raw() à cette fin, au lieu du request.body().

Lisez à propos de la façon recommandée here, et il y a aussi un github example pour cela.

+0

et je suis sûr que c'est une bonne idée d'avoir quelque chose de type 'java.sql.Blob' dans une classe Post – Yevgeniy