【问题标题】:Rest service response throwing error java.io.IOException: UT010029: Stream is closed休息服务响应抛出错误 java.io.IOException: UT010029: Stream is closed
【发布时间】:2019-01-12 16:46:25
【问题描述】:

我有一个附件属性为 LOB 的实体。在通过 Jackson JSON 转换获得 REST 服务响应时,我收到以下异常。 我正在将 Spring Boot 与 Spring JPA 一起使用

@Lob
@Column(name = "attachment")
private byte[] attachment;
在 com.fasterxml.jackson.module.afterburner.ser.ObjectMethodPropertyWriter.serializeAsField(ObjectMethodPropertyWriter.java:87) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) 在 com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) 在 com.fasterxml.jackson.module.afterburner.ser.ObjectMethodPropertyWriter.serializeAsField(ObjectMethodPropertyWriter.java:87) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) 在 com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) 在 com.fasterxml.jackson.module.afterburner.ser.ObjectMethodPropertyWriter.serializeAsField(ObjectMethodPropertyWriter.java:87) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) 2018-08-05 20:24:19.862 WARN 2084 --- [XNIO-2 task-12] .mmaExceptionHandlerExceptionResolver:无法调用 @ExceptionHandler 方法:公共默认 org.springframework.http.ResponseEntity org.zalando.problem.spring .web.advice.general.ThrowableAdviceTrait.handleThrowable(java.lang.Throwable,org.springframework.web.context.request.NativeWebRequest) java.io.IOException:UT010029:流已关闭 在 io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:136) 在 org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:639) 在 com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2039) 在 com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1051) 在 com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:953) 在 org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:286) 在 org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:106) 在 org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:231) 在 org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:203) 在 org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81)

【问题讨论】:

    标签: json hibernate spring-boot jackson jhipster


    【解决方案1】:

    需要使用字节数组序列化:

    字节数组序列化器:

    public class ByteArraySerializer extends JsonSerializer<byte[]> {
    
     @Override
     public void serialize(byte[] bytes, JsonGenerator jgen,
            SerializerProvider provider) throws IOException,
            JsonProcessingException {
        jgen.writeStartArray();
    
        for (byte b : bytes) {
            jgen.writeNumber(unsignedToBytes(b));
        }
    
        jgen.writeEndArray();
    
    }
    
    private static int unsignedToBytes(byte b) {
        return b & 0xFF;
      }
    
    }
    

    使用序列化器:

    @Lob
    @Column(name = "attachment")
    @JsonSerialize(using= ByteArraySerializer.class)
    private byte[] attachment;
    

    【讨论】:

      猜你喜欢
      • 2012-06-25
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多