Ajax服务器415错误,弹簧休息时ajax发布时出现415错误

您获得415状态代码,因为服务器在响应中发送html,而您的客户端需要json。

这可能表示发生了服务器端异常。在这种情况下,应用程序服务器会发回html响应。

你必须使服务器响应json,即使发生了异常,或者让客户端不仅处理json响应,还处理html响应。

我建议你采取第一种方法:

@ControllerAdvice

public class ExceptionControllerAdvice {

@ExceptionHandler(Exception.class)

public ErrorResponse handleException(Exception ex) {

ErrorResponse err = new ErrorResponse();

err.setStatusCode(/* 4XX or 500, depending on exception type */);

err.setERrorMessage(ex.getMessage());

return err;

}

}

public class ErrorResponse {

private int statusCode;

private String errorMessage;

// getters and setters or make the fields public

}

@ControllerAdvice就像一个Spring控制器,但它适用于每个请求。 @ExceptionHandler告诉Spring 拦截指定类型的异常,并在带注释的方法中运行代码。

根据异常的类型,您应该在要返回的ErrorResponse对象中设置正确的状态代码。这是一个非常基本的示例,您还可以从默认的Spring异常解析器扩展并覆盖默认行为。有关详细信息,请参阅this article。

修改强>

您可以尝试的另一件事是强制响应的Content-Type始终为application/json,无论http stastus返回。您可以通过在配置消息转换器和JSON序列化/反序列化属性的类中添加拦截器来实现此目的:

@Configuration

public class ServiceContext

extends WebMvcConfigurationSupport {

@Override

public void configureMessageConverters(List> converters) {

MappingJackson2HttpMessageConverter converter = this.getMappingJackson2HttpMessageConverter();

converters.add(converter);

}

@Bean

public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {

MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();

ObjectMapper objectMapper = this.getObjectMapper();

mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);

return mappingJackson2HttpMessageConverter;

}

@Bean

public ObjectMapper getObjectMapper() {

JsonFactory jsonFactory = new JsonFactory();

ObjectMapper objectMapper = new ObjectMapper(jsonFactory);

objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); // this is what you need

objectMapper.setSerializationInclusion(Include.NON_NULL); // this is to not serialize unset properties

return objectMapper;

}

@Override

public void addInterceptors(InterceptorRegistry registry) {

ResponseHeadersInterceptor headersInterceptor = this.getResponseHeadersInterceptor();

registry.addInterceptor(headersInterceptor).addPathPatterns("/**");

}

@Bean

public ResponseHeadersInterceptor getResponseHeadersInterceptor() {

return new ResponseHeadersInterceptor();

}

}

ResponseHeadersInterceptor如下:

public class ResponseHeadersInterceptor

extends HandlerInterceptorAdapter {

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

response.setContentType(MediaType.APPLICATION_JSON_VALUE + "; charset=UTF-8");

}

}

这样,服务器始终响应JSON。如果你仍然得到404或415,毫无疑问这是由于客户端的一些错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值