Embed angular into spring application and access Spring Controllers when running ng serve
up vote
1
down vote
favorite
I plan to set up a Spring-Angular application. I started right away with an Hello World-example to test out how to set up the environment. What I ended up doing:
Creating a Spring-Project and creating an Angular-application within this application. Now I can access Spring-REST-Controllers via the HttpClient Angular Module. (Code example see below).
The advantage: I can use mvn package to pack the Angular- and Spring-parts into one jar and simply deploy it on my tomcat. Sadly, when I run ng serve only the frontend is executed and I cannot access the data in my backend. Is there a way to set up my environment so that I can have the advantage of a one-project-solution and still use ng serve to test it out?
What I tried:
Pack the jar and execute it via terminal (java -jar %jar-file%) and using localhost:8080/hello as a path for my HttpClient instead of a simple /hello. That did not work out sadly.
The code I got so far:
app.component.ts
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'HelloWorld';
message: string;
constructor(private http : HttpClient) {}
ngOnInit() : void {
//this is where I tried to use localhost:8080/hello instead
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
}
}
Rest-Controller:
package com.example.helloWorld.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@GetMapping("/hello")
public String sayHello() {
return "{"message": "Hello, World!"}";
}
}
pom.xml
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
<groupId>com.example</groupId>
<artifactId>helloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>helloWorld</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>ng</executable>
<workingDirectory>src/main/ui</workingDirectory>
<arguments>
<argument>build</argument>
</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
java spring angular maven spring-boot
add a comment |
up vote
1
down vote
favorite
I plan to set up a Spring-Angular application. I started right away with an Hello World-example to test out how to set up the environment. What I ended up doing:
Creating a Spring-Project and creating an Angular-application within this application. Now I can access Spring-REST-Controllers via the HttpClient Angular Module. (Code example see below).
The advantage: I can use mvn package to pack the Angular- and Spring-parts into one jar and simply deploy it on my tomcat. Sadly, when I run ng serve only the frontend is executed and I cannot access the data in my backend. Is there a way to set up my environment so that I can have the advantage of a one-project-solution and still use ng serve to test it out?
What I tried:
Pack the jar and execute it via terminal (java -jar %jar-file%) and using localhost:8080/hello as a path for my HttpClient instead of a simple /hello. That did not work out sadly.
The code I got so far:
app.component.ts
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'HelloWorld';
message: string;
constructor(private http : HttpClient) {}
ngOnInit() : void {
//this is where I tried to use localhost:8080/hello instead
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
}
}
Rest-Controller:
package com.example.helloWorld.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@GetMapping("/hello")
public String sayHello() {
return "{"message": "Hello, World!"}";
}
}
pom.xml
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
<groupId>com.example</groupId>
<artifactId>helloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>helloWorld</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>ng</executable>
<workingDirectory>src/main/ui</workingDirectory>
<arguments>
<argument>build</argument>
</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
java spring angular maven spring-boot
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I plan to set up a Spring-Angular application. I started right away with an Hello World-example to test out how to set up the environment. What I ended up doing:
Creating a Spring-Project and creating an Angular-application within this application. Now I can access Spring-REST-Controllers via the HttpClient Angular Module. (Code example see below).
The advantage: I can use mvn package to pack the Angular- and Spring-parts into one jar and simply deploy it on my tomcat. Sadly, when I run ng serve only the frontend is executed and I cannot access the data in my backend. Is there a way to set up my environment so that I can have the advantage of a one-project-solution and still use ng serve to test it out?
What I tried:
Pack the jar and execute it via terminal (java -jar %jar-file%) and using localhost:8080/hello as a path for my HttpClient instead of a simple /hello. That did not work out sadly.
The code I got so far:
app.component.ts
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'HelloWorld';
message: string;
constructor(private http : HttpClient) {}
ngOnInit() : void {
//this is where I tried to use localhost:8080/hello instead
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
}
}
Rest-Controller:
package com.example.helloWorld.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@GetMapping("/hello")
public String sayHello() {
return "{"message": "Hello, World!"}";
}
}
pom.xml
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
<groupId>com.example</groupId>
<artifactId>helloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>helloWorld</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>ng</executable>
<workingDirectory>src/main/ui</workingDirectory>
<arguments>
<argument>build</argument>
</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
java spring angular maven spring-boot
I plan to set up a Spring-Angular application. I started right away with an Hello World-example to test out how to set up the environment. What I ended up doing:
Creating a Spring-Project and creating an Angular-application within this application. Now I can access Spring-REST-Controllers via the HttpClient Angular Module. (Code example see below).
The advantage: I can use mvn package to pack the Angular- and Spring-parts into one jar and simply deploy it on my tomcat. Sadly, when I run ng serve only the frontend is executed and I cannot access the data in my backend. Is there a way to set up my environment so that I can have the advantage of a one-project-solution and still use ng serve to test it out?
What I tried:
Pack the jar and execute it via terminal (java -jar %jar-file%) and using localhost:8080/hello as a path for my HttpClient instead of a simple /hello. That did not work out sadly.
The code I got so far:
app.component.ts
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'HelloWorld';
message: string;
constructor(private http : HttpClient) {}
ngOnInit() : void {
//this is where I tried to use localhost:8080/hello instead
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
}
}
Rest-Controller:
package com.example.helloWorld.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@GetMapping("/hello")
public String sayHello() {
return "{"message": "Hello, World!"}";
}
}
pom.xml
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
<groupId>com.example</groupId>
<artifactId>helloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>helloWorld</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>ng</executable>
<workingDirectory>src/main/ui</workingDirectory>
<arguments>
<argument>build</argument>
</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
java spring angular maven spring-boot
java spring angular maven spring-boot
asked Nov 19 at 10:27
Rüdiger
309217
309217
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
To do like this
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
You need to do some proxy configurations.
Create one proxy-config.json file inside your project in the same directory where package.json is there.
{
"/": {
"target": "http://localhost:8080",
"secure": false
}
}
and in package.json inside scripts update "start" command with "start": "ng serve --proxy-config proxy-config.json",
After that try npm start command to run your project.
This was exactly what I was looking for, thanks for that simple solution!
– Rüdiger
Nov 19 at 10:57
1
welcome @Rüdiger
– ashish pal
Nov 19 at 11:00
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
To do like this
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
You need to do some proxy configurations.
Create one proxy-config.json file inside your project in the same directory where package.json is there.
{
"/": {
"target": "http://localhost:8080",
"secure": false
}
}
and in package.json inside scripts update "start" command with "start": "ng serve --proxy-config proxy-config.json",
After that try npm start command to run your project.
This was exactly what I was looking for, thanks for that simple solution!
– Rüdiger
Nov 19 at 10:57
1
welcome @Rüdiger
– ashish pal
Nov 19 at 11:00
add a comment |
up vote
2
down vote
accepted
To do like this
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
You need to do some proxy configurations.
Create one proxy-config.json file inside your project in the same directory where package.json is there.
{
"/": {
"target": "http://localhost:8080",
"secure": false
}
}
and in package.json inside scripts update "start" command with "start": "ng serve --proxy-config proxy-config.json",
After that try npm start command to run your project.
This was exactly what I was looking for, thanks for that simple solution!
– Rüdiger
Nov 19 at 10:57
1
welcome @Rüdiger
– ashish pal
Nov 19 at 11:00
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
To do like this
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
You need to do some proxy configurations.
Create one proxy-config.json file inside your project in the same directory where package.json is there.
{
"/": {
"target": "http://localhost:8080",
"secure": false
}
}
and in package.json inside scripts update "start" command with "start": "ng serve --proxy-config proxy-config.json",
After that try npm start command to run your project.
To do like this
this.http.get('/hello').subscribe( data => {
console.log('DATA', data);
this.message = data['message'];
});
You need to do some proxy configurations.
Create one proxy-config.json file inside your project in the same directory where package.json is there.
{
"/": {
"target": "http://localhost:8080",
"secure": false
}
}
and in package.json inside scripts update "start" command with "start": "ng serve --proxy-config proxy-config.json",
After that try npm start command to run your project.
answered Nov 19 at 10:37
ashish pal
1939
1939
This was exactly what I was looking for, thanks for that simple solution!
– Rüdiger
Nov 19 at 10:57
1
welcome @Rüdiger
– ashish pal
Nov 19 at 11:00
add a comment |
This was exactly what I was looking for, thanks for that simple solution!
– Rüdiger
Nov 19 at 10:57
1
welcome @Rüdiger
– ashish pal
Nov 19 at 11:00
This was exactly what I was looking for, thanks for that simple solution!
– Rüdiger
Nov 19 at 10:57
This was exactly what I was looking for, thanks for that simple solution!
– Rüdiger
Nov 19 at 10:57
1
1
welcome @Rüdiger
– ashish pal
Nov 19 at 11:00
welcome @Rüdiger
– ashish pal
Nov 19 at 11:00
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53372609%2fembed-angular-into-spring-application-and-access-spring-controllers-when-running%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown