fastjson FastJsonHttpMessageConverter4

mwg9r5ms  于 2021-11-27  发布在  Java
关注(0)|答案(2)|浏览(270)

read方法中JSON.parseObject(in, fastJsonConfig.getCharset(), type, fastJsonConfig.getFeatures());未捕获JSONException,导致异常被抛到容器,然后直接报内部服务异常,返回的http code是500。这个十分不好,spring官方对jackson在序列化/反序列化的时候,做了异常捕获,并转成HttpMessageNotReadableException,这样处理会友好一些。

发生异常的场景如下:
使用FastJsonHttpMessageConverter4作为http message convert,内部bean中有一个field,类型是Long,传入的类型是一个字符串,字符串无法装成Long,导致JSONException。

z5btuh9x

z5btuh9x2#

@durianskh 用最新版试试

private Object readType(Type type, HttpInputMessage inputMessage) throws IOException {

        try {
            InputStream in = inputMessage.getBody();
            return JSON.parseObject(in, fastJsonConfig.getCharset(), type, fastJsonConfig.getFeatures());
        } catch (JSONException ex) {
            throw new HttpMessageNotReadableException("JSON parse error: " + ex.getMessage(), ex);
        } catch (IOException ex) {
            throw new HttpMessageNotReadableException("I/O error while reading input message", ex);
        }
    }

相关问题