采用RouterFunction
package com.example.demo.handlers;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import com.example.demo.dao.PersonDao;
import com.example.demo.entity.Person;
import reactor.core.publisher.Mono;
@Component
public class PersonHandler {
private PersonDao personDao;
public PersonHandler(PersonDao personDao) {
this.personDao = personDao;
}
/**
*
* @param request
* @return
*/
public Mono<ServerResponse> list(ServerRequest request) {
return ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(personDao.findAll(), Person.class);
}
/**
*
* @param request
* @return
*/
public Mono<ServerResponse> add(ServerRequest request) {
Mono<Person> person = request.bodyToMono(Person.class);
return ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(personDao.saveAll(person),Person.class);
}
/**
*
* @param request
* @return
*/
public Mono<ServerResponse> update(ServerRequest request) {
Mono<Person> person = request.bodyToMono(Person.class);
return person.flatMap(p->{
return personDao.findById(p.getId())
.flatMap(pp->{
pp.setAge(p.getAge());
pp.setBirth(p.getBirth());
pp.setName(p.getName());
return personDao.save(pp);
});
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).build())
.switchIfEmpty(ServerResponse.notFound().build());
}
public Mono<ServerResponse> updateOK(ServerRequest request) {
Mono<Person> person = request.bodyToMono(Person.class);
return person.flatMap(p->{
return personDao.findById(p.getId())
.flatMap(pp->{
pp.setAge(p.getAge());
pp.setBirth(p.getBirth());
pp.setName(p.getName());
return personDao.save(pp);
});
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).build())
.switchIfEmpty(ServerResponse.notFound().build());
}
/**
* 通过id获取person
* @param request
* @return
*/
public Mono<ServerResponse> id(ServerRequest request) {
Long id = new Long(request.pathVariable("id"));
return ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(personDao.findById(id),
Person.class);
}
/**
*
* @param request
* @return
*/
public Mono<ServerResponse> deleteById(ServerRequest request) {
Long id = new Long(request.pathVariable("id"));
return personDao.findById(id)
.flatMap(p -> personDao.delete(p))
.then(ServerResponse.ok().build())
.switchIfEmpty(ServerResponse.notFound().build());
}
}
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.RequestPredicates;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;
import com.example.demo.handlers.PersonHandler;
@Component
public class RouterConfig {
@Bean
RouterFunction<ServerResponse> router(PersonHandler handler){
return RouterFunctions.nest(RequestPredicates.path("/pp"),
RouterFunctions.route(RequestPredicates.GET("/list"), handler::list)
.andRoute(RequestPredicates.POST("/add").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), handler::add)
.andRoute(RequestPredicates.POST("/update").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), handler::update)
.andRoute(RequestPredicates.GET("/id/{id}"), handler::id)
.andRoute(RequestPredicates.GET("/delete/{id}"), handler::deleteById)
);
}
}
该代码示例展示了如何在SpringWebFlux中使用RouterFunction来处理HTTP请求。PersonHandler类包含了对人员列表的查询、添加、更新和删除操作,而RouterConfig类配置了路由规则,将请求映射到相应的处理器方法。
1981

被折叠的 条评论
为什么被折叠?



