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

您所在的位置:网站首页 ajax出错 Ajax服务器415错误,弹簧休息时ajax发布时出现415错误

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

2023-03-28 20:18| 来源: 网络整理| 查看: 265

您获得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();

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 + "; ");

}

}

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3