Spring boot API测试 Controller逻辑正常但返回404

  使用postman测试接口,返回404错误,如下所示

{
    "timestamp": 1516711514877,
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/sell/buyer/order/create"
}

查看Controller层,并打印ResultVOUtil.success代码如下

<textarea readonly="readonly" name="code" class="Java"> 
@PostMapping("/create")
public ResultVO create(@Valid OrderForm orderForm, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
log.error("【创建订单】参数不正确,OrderForm={}",orderForm);
throw new SellException(ResultEnum.PARAM_ERROR.getCode(),
bindingResult.getFieldError().getDefaultMessage());
}
OrderDTO orderDTO = OrderForm2OrderDTO.convert(orderForm);
if (CollectionUtils.isEmpty(orderDTO.getOrderDetails()) ) {
log.error("【创建订单】购物车不能为空");
throw new SellException(ResultEnum.CART_IS_EMPTY);
}
/**
* 数据库存储 订单信息
*/
OrderDTO creatResult=orderService.creat(orderDTO);
/** 拼接返回数据*/
Map<String,String> map = new HashMap<>();
map.put("orderId",creatResult.getOrderId());
System.out.println(ResultVOUtil.success(map));
return ResultVOUtil.success(map);

打印 ResultVOUtil.success(map)显示内容如下

ResultVO(code=0, msg=success, data={orderId=1516711514688210126})
那就奇怪了,在return该对象时候,API测试就提示404了。后来发现注解如下 用的是@Controller注解

@Controller
@Slf4j
@RequestMapping("/buyer/order")
将Controller改为RestConntroller问题成功解决!


附:@Controller和@RestConntroller区别

@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
意思是:
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

例如:本来应该到success.jsp页面的,则其显示success.


2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
3)如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值