jfinal的me.setErrorJsonContent(方法 bug

me.setErrorJsonContent(500, Ret.by("msg", "Internal Server Error 服务器内部错误").setFail().toJson());

看源码me.setErrorJsonContent方法是通过判断 发送数据的内容类型来判断是否返回json格式数据,只有 发送数据的内容类型 Content-Type: application/json 才会返回json格式的数据,发送其他类型的内容数据(Content-Type: application/x-www-form-urlencoded、Content-Type: multipart/form-data等)或者get请求一律返回html错误页面,这里是不是bug?是不是应该判断Accept 的数据格式 


image.png

评论区

杜福忠

2026-04-09 09:06

这里的设计用Content-Type应该是解决render系列 在执行 render()时异常返回预期格式错误信息。(确实在渲染模板时render很可能出现数据错误的业务异常。但是json渲染还是很稳定的,只是 JsonRender 的 json对象序列化字符串时是在构造器处理的,容易出现错误是在序列化这步,但是在构造器的时候Content-Type还没赋值)

我一般都使用全局Interceptor,自定义一个JsonInterceptor去try捕捉全局的异常情况,然后返回自定义的格式,也可以根据Accept去返回。最主要的是可以 Object ret = inv.getReturnValue(); 这样允许Action返回值用return xx; 编写代码会简洁很多,特别是在多判断语句中编写更安全了不会漏return;

懵懂java人

2026-04-09 09:50

@杜福忠 那么目前jfinal的这个setErrorJsonContent设计感觉实际用途比较小,只能是发送json数据请求的时候能用上

热门反馈

扫码入社