出问题的控制器
package com.ggg.dangdang1.controller;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ggg.dangdang1.entity.Address;
import com.ggg.dangdang1.entity.Item;
import com.ggg.dangdang1.entity.Order;
import com.ggg.dangdang1.entity.User;
import com.ggg.dangdang1.service.IItemService;
import com.ggg.dangdang1.service.IOrderService;
import com.ggg.dangdang1.vo.Cart;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author ggg
* @since 2024-06-23
*/
@RestController
@RequestMapping("/order")
@CrossOrigin(origins = "*")
public class OrderController {
@Autowired
private IOrderService orderService;
@Autowired
private IItemService itemService;
@GetMapping("/getOrderByPage")
public Page<Order> getOrderByPage(Integer pageNum, HttpSession session){
User user = (User) session.getAttribute("token");
return orderService.page(new Page<>(pageNum, 10), Wrappers.<Order>lambdaQuery().eq(Order::getUserId,user.getUserId()));
}
@PostMapping("/createOrder")
public Order createOrder(@RequestBody Address address){
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
Cart cart = (Cart) requestAttributes.getAttribute("cart", RequestAttributes.SCOPE_SESSION);
Order order = new Order();
order.setStatus("UNPay");
BeanUtils.copyProperties(address,order);
order.setCreateDate(LocalDateTime.now());
String orderId = String.valueOf(IdUtil.getSnowflake().nextId());
order.setOrderId(orderId);
order.setTotal(cart.getTotalPrice());
orderService.save(order);
List<Item> items = new ArrayList<>();
cart.getBooks().forEach((k,v)->items.add(new Item(null,k,v.getCount(),LocalDateTime.now(),order.getOrderId())));
itemService.saveBatch(items);
//requestAttributes.removeAttribute("cart",RequestAttributes.SCOPE_SESSION);
return order;
}
@GetMapping("/delOrderById")
public void delOrderById(String orderId){
LambdaQueryWrapper<Item> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(Item::getOrderId,orderId);
itemService.remove(queryWrapper);
orderService.removeById(orderId);
}
@GetMapping("/getOrderById")
public Order getOrderById(String orderId){
System.out.println("aaaa");
return orderService.getById(orderId);
}
}
其它模块运转良好,解决跨域问题的两个类
package com.ggg.dangdang1.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//处理跨域资源共享(CORS)
@Component
public class AccessInterceptor implements HandlerInterceptor {
//HandlerInterceptor接口中的方法,在请求到达控制器之前执行。它返回一个布尔值,如果返回true,请求将继续处理;如果返回false,请求将被中止。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("aa");
//设置响应头Access-Control-Allow-Origin,其值为请求头中的Origin。表明允许所有来源的跨域请求。
// response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials","true");
response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
// header("Access-Control-Allow-Origin: *");
//支持post请求
response.setHeader("P3P","CP=CAO PSA OUR");
if("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setHeader("Access-Control-Allow-Headers", "Content-Type,Origin,Accept");
response.setHeader("Access-Control-Allow-Methods", "POST,GET,HEAD,PUT,DELETE,TRACE,OPTIONS");
//设置预检请求的结果在缓存中的最长时间(秒),在这个时间内,不需要再次发送预检请求。
response.setHeader("Access-Control-Max-Age","18000");
}
//返回true,表示请求继续处理,控制器可以正常执行。
return true;
}
}
package com.ggg.dangdang1.interceptor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("a");
Object flag = request.getSession().getAttribute("token");
if (ObjectUtils.isEmpty(flag)){
ObjectMapper objectMapper = new ObjectMapper();
ServletOutputStream outputStream = response.getOutputStream();
outputStream.print(objectMapper.writeValueAsString(new HashMap<String,Integer>(){{
put("status",0616);
}}));
return false;
}
return true;
}
}
package com.ggg.dangdang1.config;
import com.ggg.dangdang1.interceptor.AccessInterceptor;
import com.ggg.dangdang1.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private AccessInterceptor accessInterceptor;
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(accessInterceptor)
.addPathPatterns("/**");
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/address/*","/cart/*","/item/*","/order/*")
.excludePathPatterns("/cart/getCartBookNum");
}
}
很难受,不知道问题出在哪里,求大佬解答