programing

Spring Boot + REST 응용 프로그램에서 "No message available" (메시지가 없습니다) 오류가 나타난다.

goodsources 2023. 3. 27. 21:13
반응형

Spring Boot + REST 응용 프로그램에서 "No message available" (메시지가 없습니다) 오류가 나타난다.

아래 그림과 같이 스프링 부트 데모 프로젝트를 만들고 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);
    }
}

요청 메서드 GET에서 URL "http://localhost:8080/api/greetings"를 사용하여 서비스를 호출하려고 하면 아래 오류 메시지가 나타납니다.

{
  "timestamp": 1449495844177,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/api/greetings"
}

Spring Boot 어플리케이션별로 web.xml에서 Spring Dispatcher servlet을 설정할 필요가 없습니다.

누가 여기서 잃어버린 점을 찾는 것을 도와줄 수 있나요?

놓치고 있을 @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패키지와 모든 어린이 패키지를 스캔합니다.컨트롤러가 어느 쪽에도 없을 수 있습니다.

생각할 수 있는 3가지 솔루션:

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));
    }
}

이것은 JsonPostExampleProj1 어플리케이션입니다.자바:

@SpringBootApplication
public class JsonPostExampleProj1Application {

    public static void main(String[] args) {
        SpringApplication.run(JsonPostExampleProj1Application.class, args);
    }
}

2) 컨트롤러를 Your SpringBootFile.java 패키지가 아닌 다른 패키지에 넣으려면 = Spring: 여러 "Spring Application"을 실행합니다.응용 프로그램 메인 메서드의 실행()

3) 컨트롤러 클래스 위에 @Controller가 아닌 @RestController를 사용해 보십시오.

이것은 내 경우처럼 누군가를 도울 수 있다.

컨트롤러의 패키지 이름이 Spring 메인 메서드 패키지의 파생 패키지인지 확인하십시오.

예를 들어 다음과 같습니다.

가 「」인 .com.company.demo.example컨트롤러 패키지는 다음과 같습니다.com.company.demo.example.controller(과 같은 com.company.demo.controller★★★★★★★★★★★★★★★★★★★★★★★)

이이 모두 효과가 수 것을 확인해 주세요.그래서 아마 당신도 놓칠 수 있는 다른 긍정적인 것을 추가하고 있습니다.주석이 있는지 확인해 주세요.@ResponseBody당신의 방법에 따라.

@RequestMapping(value="/yourPath", method=RequestMethod.GET)
@ResponseBody
public String exampleMethod() {
return "test";
}

엔트리 와 Spring Boot 엔트리 @SpringBootApplication((scanBasePackages = "com.duwamish.x.y")시 되도록 하기 위해 so기빈빈빈빈빈빈빈빈빈빈빈/빈을빈빈빈빈 so so so so so so so so so so so so so so so so so so so so so so so so.

contextPath여야 .이 "Tomcat"인 프로그램이 되어 있는 :myapplication해 주세요.

$ 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오직.

사용하시는 경우@SpringBootApplication다음 패키지에 있는 휴게 서비스 컨트롤러를 확인합니다.

com.testSpring->SpringBootApplication class
com.testSpring.controller->RestfulController classes
com.testSpring.model->Model classes
..etc

사용하시는 경우@ComponentScan(basePackageClasses = UserController.class)에 특정 컨트롤러 클래스 이름을 나타냅니다.

같은 에러가 발생했지만 String을 반환하고 있다는 것을 깨닫고 ResponseEntity로 변경하여 정상적으로 동작하고 있습니다.

제 경우 리본으로 잘못된 경로를 호출했습니다.

@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);

}

원격의currency-exchange서비스에 대한 핸들러가 없습니다./exchange/{from}/to/{to}경로.

존재하지 않는 URL의 경우 404로 "No message available"로 표시됩니다.이상합니다.

실제로 컨트롤러 패키지를 Spring Boot Application Java 파일(Spring Boot 메인 Java 클래스)에 포함되어 있는 경로와 같은 경로로 만들어야 합니다.

com.abc |--- @SpringBootApplication 메인 Java 클래스

com.abc.controller ||-- @RestController 클래스

같은 에러가 발생하고 있습니다만, API를 호출하기 위한 패스가 문제라는 것을 알고 있습니다.애플리케이션 이름이 데모일 경우 전화해야 합니다.http://localhost:9090/AdminProductsAdmin Products에 액세스 할 수 없습니다.http://localhost:9090/demo/AdminProducts이 이름은 Tomcat에서 전쟁을 전개한 후에 사용할 수 있습니다.

404에 "No message available"이 포함되어 있는 경우 http 요청을 확인하기만 하면 구문 문제가 발생할 수 있습니다.

적어도 나는 우체부와 함께 투고하는 동안 요청에 구문 오류가 있었다.

모든 패키지는 메인 패키지 뒤에 있어야 합니다.

이 com.discom.discom.* (모든 패키지)

언급URL : https://stackoverflow.com/questions/34135205/getting-no-message-available-error-with-spring-boot-rest-application

반응형