gpt4 book ai didi

java - 找不到可接受的表示 - 406 Not Acceptable 错误

转载 作者:行者123 更新时间:2023-12-02 03:05:11 24 4
gpt4 key购买 nike

我正在处理将 spring 版本从 4.3.2 升级到 5.1.1 的要求。升级后,我遇到 JSON 响应 406 Not Acceptable

我调试了AbstractMessageConverterMethodProcessor类,发现4.x和5.x版本的spring在writeWithMessageConverters方法的实现上略有不同。

MediaType selectedMediaType = null;
MediaType contentType = outputMessage.getHeaders().getContentType();
if (contentType != null && contentType.isConcrete()) {
if (logger.isDebugEnabled()) {
logger.debug("Found 'Content-Type:" + contentType + "' in response");
}
selectedMediaType = contentType;
}

在上面的实现中,即使将生产者设置为“application/json”,ContentType 也始终为 text/html;charset=UTF-8。任何人都可以帮助我理解为什么它不起作用以及如何解决这个问题。

@RequestMapping (value ="/BuyerListForAutocompleteQuery.af" produces = "application/json")
public @ResponseBody JSONObject getBuyerListForAutocompleteQuery(HttpServletRequest request, HttpServletResponse response) {
JSONObject jsonObject = new JSONObject();
//actual impl goes here
jsonObject.element("query", query);
jsonObject.element("suggestions", suggestions);
jsonObject.element("data", data);
return jsonObject;
}

最佳答案

在 Spring 4.x 中,响应内容类型取自请求 header ,而在 Spring 5.x 中,它现在取自响应 header 。这只是代码上的区别。

//Spring 5.x new code
MediaType selectedMediaType = null;
MediaType contentType = outputMessage.getHeaders().getContentType();
if (contentType != null && contentType.isConcrete()) {
if (logger.isDebugEnabled()) {
logger.debug("Found 'Content-Type:" + contentType + "' in response");
}
selectedMediaType = contentType;
}

在我的应用程序中,我们明确将响应类型设置为 text/html;charset=UTF-8 (这对于 spring 4.x 来说从来不是问题)。删除此错误后就消失了。

关于java - 找不到可接受的表示 - 406 Not Acceptable 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57026678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com