springboot接口返回数据类型解析问题

问题:今天在使用postman调试springboot项目的接口的时候一直报错提示:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

但是我在controller里已经写了@ResponseBody标签,controller里使用的是@Controller标签

结果在使用postman测试的时候一直是{ status:500; msg:"could not find acceptable representation"};

在网上看了很多种方法有的是在pom.xml里添加其他json包的依赖等等。。。无果,,,,

解决:

最终success解决了;

在全局拦截器里继承WebMvcConfigurerAdapter然后重写configureContentNegotiation方法,在方法里重写下:

super.configureContentNegotiation(configurer);
configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8);
configurer.favorPathExtension(false);

这里千万注意一定要先调用super父类的方法,然后再写默认的返回数据格式(今天就是因为在这里顺序后调用父类的方法,导致一直是失败的)!!!

同时你也可以在启动类里继承WebMvcConfigurerAdapter去重写;

问题解决,希望这次踩过的坑可以帮助大家!

### 解决Spring Boot重定向控制器返回JSON数据但未完成重定向的问题 当遇到Spring Boot中的重定向接口未能正常工作的情况时,通常是因为HTTP状态码设置不当或是视图解析器配置错误。为了确保重定向功能按预期运行并能正确处理JSON响应,可以采取以下措施: #### 配置正确的HTTP状态码 对于需要执行客户端侧重定向的操作,在Controller方法中应显式指定`HttpStatus.FOUND`或` HttpStatus.TEMPORARY_REDIRECT`作为响应的状态码,并提供目标URL。 ```java import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; @RestController public class RedirectController { @GetMapping("/redirect") @ResponseStatus(HttpStatus.FOUND) public ResponseEntity<Void> performRedirect() { HttpHeaders headers = new HttpHeaders(); headers.setLocation(URI.create("http://example.com/target")); return new ResponseEntity<>(headers, HttpStatus.FOUND); } } ``` 此代码片段展示了如何通过设置适当的HTTP头来实现302 Found类型的重定向[^1]。 #### 使用 `RedirectView` 另一种方式是利用Spring MVC内置的`RedirectView`类来进行服务器端重定向操作。这种方式允许更灵活地控制重定向行为以及携带参数到新页面。 ```java import org.springframework.web.servlet.view.RedirectView; @Controller @RequestMapping("/oldPath") public class MyController { @GetMapping("") public ModelAndView redirectToNewPage(ModelAndView modelAndView) { modelAndView.setView(new RedirectView("/newPath", true)); // 可选:向模型添加属性以便传递给新的请求路径 modelAndView.addObject("message", "This page has moved."); return modelAndView; } } ``` 上述例子说明了怎样创建一个带有消息的对象并通过`ModelAndView`对象将其发送至另一个路由地址上显示出来。 #### 处理AJAX请求下的重定向 如果前端应用使用JavaScript发起异步调用(如Ajax),默认情况下浏览器不会自动跟随由服务端发出的Location头部指示的位置跳转。因此在这种场景下可能还需要额外编写JS逻辑监听特定事件以触发手动导航动作。 ```javascript $.ajax({ url: '/api/endpoint', type: 'GET', success: function(response){ window.location.href = response.redirectUrl; // 假设API返回了一个包含重定向链接的数据结构 }, error: function(xhr,status,errorThrown){ console.error('Error occurred:', errorThrown); } }); ``` 这段脚本示范了一种简单的做法——即在成功接收到含有重定向信息的结果之后改变当前窗口位置从而达到间接重定向前端的效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不喜欢吃猫的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值