【发布时间】:2020-07-05 12:32:59
【问题描述】:
我有一个服务类book.service.ts:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Book } from '../common/book';
import { BookCategory } from '../common/book-category';
import { Finalcart } from '../common/finalcart';
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
@Injectable({
providedIn: 'root'
})
export class BookService {
private finalCart="http://localhost:8080/api/test/";
constructor(private httpClient:HttpClient) { }
addFinalCart(finalCart:Finalcart){
return this.httpClient.post(`${this.baseUrl}`+'finalCart',finalCart, httpOptions);
}
服务方式
addFinalCart(finalCart:Finalcart) 正在从 component.ts 文件中调用:
@Component({
selector: 'app-checkout',
templateUrl: './checkout.component.html',
styleUrls: ['./checkout.component.css']
})
export class CheckoutComponent implements OnInit {
cartItems: CartItem[] = [];
totalPrice: number = 0;
totalQuantity: number = 0;
checkoutFormGroup: FormGroup;
finalCart:Finalcart;
constructor(private formBuilder: FormBuilder,private _cartService: CartService,
private _bookService:BookService) { }
ngOnInit() {
//I have not included all codes,only the required ones.
}
onSubmit() {
if (this.checkoutFormGroup.invalid) {
return;
}
console.log(this.cartItems);
console.log('Purchase the books');
let finalCart=new Finalcart(this.checkoutFormGroup.value.billingAddress,
this.checkoutFormGroup.value.shippingAddress, this.checkoutFormGroup.value.creditCard, this.cartItems);
console.log('finalcart is',finalCart);
this._bookService.addFinalCart(this.finalCart);
}
}
所以,我有 JWT 身份验证,并且我已经成功登录并在调用 api 时:
http://localhost:8080/api/test/finalCart
我在spring boot中公开的api没有被调用。但是,当我从postman调用api时,api在spring boot中被成功调用,但是从postman我也传递了令牌信息,但是虽然从角度的服务类我没有发送用户信息。
package in.ashwin.onlinebookstore.controller;
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/test")
public class TestController {
@Autowired
UserDetailsServiceImpl userdetailService;
@Autowired
private OrderRepository orderRep;
@Autowired
private BookRepository bookrepository;
@Autowired
private CartItemRepository cartItemRepo;
@Autowired
private OrderDetailsRepository orderDetailRepostiory;
@Autowired
private BillingaddressRepository billAddressRepo;
@Autowired
private ShippingaddressRepository shippingAddressRepo;
@PostMapping("/finalCart")
@PreAuthorize("hasRole('USER') or hasRole('MODERATOR') or hasRole('ADMIN')")
public String finalCart(@RequestBody Finalcart finalCart,HttpServletRequest request) {
String user=request.getUserPrincipal().getName();
System.out.println(user);
System.out.println(finalCart);
UserDetailsImpl userDetails=(UserDetailsImpl)userdetailService.loadUserByUsername(user);
User u=new User(userDetails.getId(),userDetails.getUsername(),userDetails.getPassword(),userDetails.getEmail());
Order ord= orderRep.save(new Order(u,new Date()));
System.out.println(ord);
Billingaddress ba= billAddressRepo.save(new Billingaddress(finalCart.getBillingAddress(),ord));
System.out.println(ba);
Shippingaddress sa=shippingAddressRepo.save(new Shippingaddress(finalCart.getShippingAddress(),ord));
System.out.println(sa);
finalCart.getCartItem().forEach(s->{
Optional<Book> b=bookrepository.findById(Long.valueOf(s.getBookId()).longValue());
CartItem c=cartItemRepo.save(new CartItem(s.getName(),s.getImageUrl(),s.getUnitPrice(),s.getQuantity(), b.get()));
orderDetailRepostiory.save(new OrderDetails(c,ord));
});
System.out.println(userDetails.getUsername()+userDetails.getPassword());
System.out.println("entered here");
System.out.println(finalCart);
System.out.println(finalCart.getBillingAddress());
System.out.println(finalCart.getShippingAddress());
System.out.println(finalCart.getCreditCard());
return "null";
}
}
我看到在 Eclipse 中我的控制台中没有打印任何内容。我认为我在从 Angular 服务类发送信息时出错了。
【问题讨论】:
标签: java angular spring spring-boot