当前位置: 首页 > 知识库问答 >
问题:

Spring 5 RouterFunction状态415,原因为“内容类型'application/json'不受支持”

夹谷野
2023-03-14

我正在尝试使用Spring 5的舍入函数,按照下面的代码

public class PersonHandler {

    private final PersonRepository repository;

    public PersonHandler(PersonRepository repository) {
        this.repository = repository;
    }

    public Mono<ServerResponse> listPeople(ServerRequest request) { 
        System.out.println("List people");
        Flux<Person> people = repository.findAll();
        return ServerResponse.ok().contentType(APPLICATION_JSON).body(people, Person.class);
    }

    public Mono<ServerResponse> createPerson(ServerRequest request) { 
        System.out.println("Insert people");
        Mono<Person> person = request.bodyToMono(Person.class); 
        repository.insert(person).subscribe();
        return ServerResponse.ok().build();
    }

    public Mono<ServerResponse> getPerson(ServerRequest request) { 
        System.out.println("Get people");
        String personName = request.pathVariable("name");
        Mono<ServerResponse> notFound = ServerResponse.notFound().build();
        Mono<Person> personMono = this.repository.findByName(personName);
        return personMono
                .flatMap(person -> ServerResponse.ok().contentType(APPLICATION_JSON).body(fromObject(person)))
                .switchIfEmpty(notFound);
    }
}
@Configuration
public class RoutesConfiguration {

    @Bean
    RouterFunction<?> routes(PersonRepository personRepository) {

        PersonHandler handler = new PersonHandler(personRepository);
        return nest(path("/person"),
                nest(accept(APPLICATION_JSON),
                        route(GET("/{id}"), handler::getPerson)
                        .andRoute(method(HttpMethod.GET), handler::listPeople)
                ).andRoute(POST("/").and(contentType(APPLICATION_JSON)), handler::createPerson));
    }
}
curl -X POST -d {"name":"John Doe","age":20} -H "Content-Type: application/json" http://localhost:8081/person
    reactor.core.Exceptions$ErrorCallbackNotImplemented: org.springframework.web.server.UnsupportedMediaTypeStatusException: Response status 415 with reason "Con
tent type 'application/json' not supported"
Caused by: org.springframework.web.server.UnsupportedMediaTypeStatusException: Response status 415 with reason "Content type 'application/json' not supported
"
        at org.springframework.web.reactive.function.server.DefaultServerRequest.lambda$static$0(DefaultServerRequest.java:66) ~[spring-webflux-5.0.0.RELEASE
.jar:5.0.0.RELEASE]
        at reactor.core.publisher.Mono.lambda$onErrorMap$19(Mono.java:2354) ~[reactor-core-3.1.1.RELEASE.jar:3.1.1.RELEASE]
        at reactor.core.publisher.Mono.lambda$onErrorResume$21(Mono.java:2446) ~[reactor-core-3.1.1.RELEASE.jar:3.1.1.RELEASE]
        at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:88) ~[reactor-core-3.1.1.RELEASE.jar:3.1.1.RELEASE]
        at reactor.core.publisher.Operators.error(Operators.java:175) ~[reactor-core-3.1.1.RELEASE.jar:3.1.1.RELEASE]
        at reactor.core.publisher.MonoError.subscribe(MonoError.java:52) ~[reactor-core-3.1.1.RELEASE.jar:3.1.1.RELEASE]

共有1个答案

逑兴安
2023-03-14

就这样发生在我身上。我使用Maven并通过clearning我的m2缓存解决了这个问题:

rm -rf ~/.m2/repository/* (my .m2 folder is in my home directory)

然后运行MVN clean install并重新启动应用程序,但没有收到异常。

 类似资料: