当我传递无效的json格式时,得到了400 http响应,
我想返回定制的json消息而不是这个消息,有人能建议在spring4.1中怎么做吗?
使用controlleradvice处理execption,但它不工作。
@ControllerAdvice
public class GlobalControllerExceptionHandler {
@ExceptionHandler({org.springframework.http.converter.HttpMessageNotReadableException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public String resolveException() {
return "error";
}
}
spring-config.xml如下所示
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- Renders JSON View -->
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
下面给出了来自WebSphereApplicationServer(7.0)的json请求和响应。
Request 1: Empty json request : {}
Response Status Code: 400 Bad Request
Response Message : Json request contains invalid data:null
Request 2:Invalid format of Json Request : {"data":,"name":"java"}
Response Status Code: 400 Bad Request
Response or Exception message :
nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (',' (code 44)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: com.ibm.ws.webcontainer.srt.http.HttpInputStream@8f308f3; line: 5, column: 57]
类似于下面使用springmvc链接的问题,接受带有错误json的post请求会导致返回默认的400错误代码服务器页面
3条答案
按热度按时间fdx2calv1#
您可以在pom.xml add dependency中尝试以下操作:
这将在返回java对象时自动将其转换为json。就像你可以写一个类来回应:
然后您可以返回任何java对象,它们将作为json接收,
eit6fx6z2#
最后,我使用httpservletrequestwrapper通过servlet过滤器处理异常。
步骤1:添加过滤器
步骤2:从CustomizeHttpServletRequestWrapper类获取请求主体
步骤3:使用JSONAPI将请求体json字符串转换为java对象
步骤4:链接请求/响应
步骤5:捕获异常/并更新httpservlet响应
使用以下参考。
过滤器示例
httpservletrequestwrapper示例
字符串到json对象
在这种方法的帮助下,我可以处理400/405/415http错误。
jutyujz03#
您可以尝试这样Map异常。此代码将返回400状态,但您可以使用与发布的链接相同的方式更改返回