Issue
I'm building a project in angular which connects to my java-backend (restapi). The project basics are already done, but now I'm adding one by one some advanced calls. Suddenly, I come to the point where I'm implementing a new method, but therequest just doesn't reach the method in the controller. I don't even get an error in the frontend, the backend just doesn't react. The frontend service creates the right url, makes the call, no error .. backend receives nothing.
I tried changing the request to get, losing the pathvariables and using RequestBody, creating a simple test-controller that returns a String, .. nothing seems to work anymore, except what was already their. What am I doing wrong ? Why doesn't this specific request doesn't reach my backend?
angular service:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
@Injectable({
providedIn: 'root'
})
export class ProductService {
url = "http://localhost:8080/products/";
constructor(private http: HttpClient) { }
extendDateWithMonths(month : number, id:number | undefined): Observable<Response> {
console.log("service reached");
console.log("month: " + month);
console.log("id: " + id);
const specificUrl = this.url + "extenddate/"+ `${month}` +"/"+ `${id}`;
console.log("url: " + specificUrl);
return this.http.post<any>(specificUrl, month, httpOptions);
}
}
console.out request:
- service reached
- month: 3
- id: 1
- url:http://localhost:8080/products/extenddate/3/1
java backend controller running on localhost 8080:
@RestController
@RequestMapping("/products")
@CrossOrigin(exposedHeaders = "http://localhost:4200")
public class ProductController {
@Autowired
ProductService productService;
@PostMapping("/extenddate/{month}/{id}")
public ResponseEntity<?> extenddate(@PathVariable int month, @PathVariable long id){
System.out.println("extenddate reached");
productService.extendProductsFromBon(month, id);
return ResponseEntity.ok(new MessageResponse("date extended successfully!"));
}
}
Why doesn't this specific request doesn't reach my backend? Why don't I get an error or anything from the console? Either it can reach the restapi or it cannot, but this is very strange.
Solution
You call the method, that is why you see the console logs. The return value, however is a cold observable. In order to actually send the request to the backend you need to subscribe to the observable.
I expect that you simply call the method like this somewhere:
const response = this.productService.extendDateWithMonths(1, 2);
What you need to do:
this.productService.extendDateWithMonths(1, 2).subscribe(
response => this.response = response;
);
Answered By - MoxxiManagarm
Answer Checked By - Timothy Miller (JavaFixing Admin)