[SPRING] Spring Boot + REST 응용 프로그램에서 "No message available"오류가 발생합니다.
SPRINGSpring Boot + REST 응용 프로그램에서 "No message available"오류가 발생합니다.
데모 Spring Boot 프로젝트를 만들고 여기에 표시된 것처럼 Restful 서비스를 구현했습니다.
@RestController
public class GreetingsController {
@RequestMapping(value="/api/greetings", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getGreetings(){
return new ResponseEntity<String>("Hello World", HttpStatus.OK);
}
}
URL "http : // localhost : 8080 / api / greetings"을 가진 우편 배달 도구를 사용하여 요청 방법으로 GET 서비스를 호출하려고하면 오류 메시지가 나타납니다.
{
"timestamp": 1449495844177,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/api/greetings"
}
Per Spring 부트 애플리케이션에서는 web.xml에 Spring Dispatcher 서블릿을 구성 할 필요가 없습니다.
누군가 제가 여기서 누락 된 점을 발견하도록 도울 수 있습니까?
해결법
-
==============================
1.아마도 @SpringBootApplication이 누락되었습니다.
아마도 @SpringBootApplication이 누락되었습니다.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }
@SpringBootApplication에는 패키지 및 모든 하위 패키지를 검사하는 @ComponentScan이 포함되어 있습니다. 귀하의 컨트롤러가 그 컨트롤러에 없을 수도 있습니다.
-
==============================
2.세 가지 가능한 솔루션 :
세 가지 가능한 솔루션 :
1) @Controller가있는 YourController.java 파일과 @SpringBootApplication이있는 YourSpringBootFile.java 파일이 동일한 패키지에 있는지 확인하십시오.
예를 들어, 이것은 잘못되었습니다.
이것은 올바른 방법입니다.
그래서 내가 말하는 내용을 알았습니다. 여기 WebController.java 파일이 있습니다.
@RestController public class WebController { private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); @RequestMapping(value= "/hi", method = RequestMethod.GET) public @ResponseBody Greeting sayHello( @RequestParam(value = "name", required = false, defaultValue = "Stranger") String name) { System.out.println("Inside sayHello() of WebController.java"); return new Greeting(counter.incrementAndGet(), String.format(template, name)); } }
다음은 내 JsonPostExampleProj1Application.java입니다.
@SpringBootApplication public class JsonPostExampleProj1Application { public static void main(String[] args) { SpringApplication.run(JsonPostExampleProj1Application.class, args); } }
2) 컨트롤러가 YourSpringBootFile.java 패키지 외부의 다른 패키지에있게하려면 다음 지시 사항을 따르십시오. Spring : 응용 프로그램 기본 메소드에서 여러 "SpringApplication.Run ()"을 실행하십시오.
3) 컨트롤러 클래스 위에 @Controller 대신 @RestController를 사용해보십시오.
-
==============================
3.@SpringBootApplication ((scanBasePackages = "com.duwamish.x.y")을 사용하여 SpringBoot 진입 점을 주석 처리하여 초기화 할 때 모든 스프링 구성 요소 / Bean을 포함하도록하는 것 외에도,
@SpringBootApplication ((scanBasePackages = "com.duwamish.x.y")을 사용하여 SpringBoot 진입 점을 주석 처리하여 초기화 할 때 모든 스프링 구성 요소 / Bean을 포함하도록하는 것 외에도,
contextPath도 맞아야합니다. 애플리케이션 이름이 myapplication 인 tomcat에 배포 된 경우 아래를 참조하십시오.
$ ll /usr/local/apache-tomcat-8.0.42/webapps/ total 179216 12495017 drwxrwxrwx 17 urayagppd NORD\Domain Users 578 Mar 8 11:59 ROOT 12495019 drwxrwxrwx 55 urayagppd NORD\Domain Users 1870 Mar 8 11:59 docs 12495042 drwxrwxrwx 7 urayagppd NORD\Domain Users 238 Mar 8 11:59 examples 12495109 drwxrwxrwx 7 urayagppd NORD\Domain Users 238 Mar 8 11:59 host-manager 12495114 drwxrwxrwx 8 urayagppd NORD\Domain Users 272 Mar 8 11:59 manager 16169612 drwxr-xr-x 4 urayagppd NORD\Domain Users 136 May 7 18:47 myapplication 16169594 -rw-r--r-- 1 urayagppd NORD\Domain Users 45340041 May 7 18:47 myapplication.war
그런 다음 REST 엔드 포인트는 / myapplication / api / greetings입니다.
그러나 응용 프로그램 전쟁이 ROOT로 배포되면 끝점 리소스는 / api / greetings 만됩니다.
-
==============================
4.@SpringBootApplication 만 사용하는 경우 나머지 서비스 컨트롤러가 아래와 같은 패키지에 있는지 확인하십시오.
@SpringBootApplication 만 사용하는 경우 나머지 서비스 컨트롤러가 아래와 같은 패키지에 있는지 확인하십시오.
@ComponentScan (basePackageClasses = UserController.class)을 사용하는 경우 특정 컨트롤러 클래스 이름을 언급하십시오.
-
==============================
5.이것은 내 경우와 마찬가지로 누군가를 도울 수 있습니다.
이것은 내 경우와 마찬가지로 누군가를 도울 수 있습니다.
컨트롤러의 패키지 이름이 Spring main 메소드 패키지의 파생 된 (또는 자식) 패키지인지 확인하십시오.
예 :
main 메소드 패키지가 com.company.demo.example 인 경우 컨트롤러 패키지는 com.company.demo.example.controller와 같아야합니다 (com.company.demo.controller와 같은 것을 지정하면 작동하지 않을 것입니다).
-
==============================
6.제 경우에는 리본으로 잘못된 경로를 불렀습니다.
제 경우에는 리본으로 잘못된 경로를 불렀습니다.
@FeignClient(name = "currency-exchange") @RibbonClient(name = "currency-exchange") public interface CurrencyExchangeProxy { @GetMapping("/exchange/{from}/to/{to}") PairRateDto callForExchangeValue(@PathVariable("from") String fromValue, @PathVariable("to") String toValue); }
원격 통화 교환 서비스에는 / exchange / {from} / to / {to} 경로에 대한 처리기가 없습니다.
따라서 존재하지 않는 URL의 경우 "No message available"이라는 메시지가 이상한 404가 있습니다.
-
==============================
7.모든 패키지는 주 패키지 뒤에 있어야합니다.
모든 패키지는 주 패키지 뒤에 있어야합니다.
like this com.example.demo. * (모든 패키지)
from https://stackoverflow.com/questions/34135205/getting-no-message-available-error-with-spring-boot-rest-application by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @SpringBootConfiguration과 @Configuration의 차이점 (0) | 2019.07.08 |
---|---|
[SPRING] org.springframework.boot를 찾을 수 없습니다 : spring-boot-starter-velocity (0) | 2019.07.08 |
[SPRING] 스프링 부트의 CORS 정책 충돌 (0) | 2019.07.07 |
[SPRING] Log4j2가 Spring 부트 로깅 구현을 찾을 수 없음 (0) | 2019.07.07 |
[SPRING] Spring JDBCTemplate 대 최대 절전 모드 성능 측면 [닫힘] (0) | 2019.07.07 |