2014-09-18 40 views
0

我有一个使用Spring引导的休息应用程序构建。 api请求对象是一个包含String和ASN1OctetString的自定义对象。所以我写了一个消息转换器的自定义实现。MessageConverter for Spring引导REST应用程序不工作的自定义实现

但iam无法将inputStream转换为包含String和ASN1OctetString的customVO对象。 我如何将输入流转换为customVo对象?

我试过使用ObjectInput ois = new ObjectInputStream(is);,但它给出了一个错误,如标题无效。 请让我知道我可以如何解决这个问题。

下面给出了代码的代码。 应用程序有一个控制器,如下: -

@RequestMapping(method = RequestMethod.POST, value = "/MyApp/postMessage", produces = "application/json;charset=UTF-8",consumes="ASN1OctetString/bytes;charset=UTF-8") 
public DeferredResult<MyCustomVO> process(@Valid @RequestBody MyCustomVO myCustomVO, HttpServletRequest request){ 

    //service code 
} 

请求Bean如下: -

import com.unboundid.asn1.ASN1OctetString; 

public class MyCustomVO { 

    protected String actionDesc; 
    protected ASN1OctetString transId; 

    //setter getter methods 
} 

用于消息转换器的自定义实现: -

public class MyCustomVOConverter extends AbstractHttpMessageConverter<MyCustomVO> { 

public MyCustomVOConverter() { 
    super(); 
} 

public MyCustomVOConverter(org.springframework.http.MediaType supportedMediaType) { 
    super(supportedMediaType); 
} 

public MyCustomVOConverter(MediaType... supportedMediaTypes) { 
    super(supportedMediaTypes); 
} 

@Override 
protected boolean supports(Class<?> clazz) { 
    return MyCustomVO.class.equals(clazz); 
} 

@Override 
protected MyCustomVO readInternal(Class<? extends MyCustomVO> clazz, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException { 
    MyCustomVO MyCustomVORequest= new MyCustomVO(); 

    InputStream is= httpInputMessage.getBody(); 
**//Need to convert the stream to customVO object** 
} 

@Override 
protected void writeInternal(MyCustomVO MyCustomVOResp, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException { 

} 

}

回答

0

你必须在你的messageConverter中指定一个MediaType,否则co逆变器不知道他负责哪种媒体类型。 做这样的事情来注册一个媒体类型:

public MyCustomVOConverter() { 
    MediaType type = new MediaType("ASN1OctetString", "bytes", Charset.forName("UTF-8"); 
    setSupportedMediaTypes(Arrays.asList(type)); 
} 
相关问题