springboot webflux 参数传递(表单序列化)


springboot webflux  参数传递(表单序列化)

 

表单序列话传递的参数可用控制器处理,也可使用路由函数处理

 

 

*********************

控制器处理参数

 

HelloController

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(Person person){
        System.out.println(person);

        return person.toString();
    }

    @RequestMapping("/hello2")
    public String hello2(Mono<Person> person){
        person.subscribe(System.out::println);

        return "success";
    }

    @RequestMapping("/hello3")
    public Mono<Person> hello3(ServerWebExchange exchange){
        System.out.println("hello 3");

        return exchange.getFormData().map(map -> {
            String name=map.getFirst("name");
            Integer age=Integer.parseInt(Objects.requireNonNull(map.getFirst("age")));
            System.out.println("name:"+name);
            System.out.println("age:"+age);

            Person person=new Person();
            person.setName(name);
            person.setAge(age);

            return person;
        });
    }

    @RequestMapping("/hello4")
    public Mono<Person> hello4(ServerWebExchange exchange){
        System.out.println("hello 4");

        return exchange.getFormData().flatMap(map -> {
            String name=map.getFirst("name");
            Integer age=Integer.parseInt(Objects.requireNonNull(map.getFirst("age")));
            
            System.out.println("name:"+name+"  "+"age:"+age);

            Person person=new Person();
            person.setName(name);
            person.setAge(age);
            
            return Mono.just(person);
        });
    }
}

 

 

*********************

路由函数

 

CustomRouterConfig

@Configuration
public class CustomRouterConfig {

    @Bean
    public RouterFunction<ServerResponse> initRouterFunction(){
        return RouterFunctions.route()
                .POST("/hello",serverRequest -> serverRequest.formData().flatMap(map -> {
                    String name=map.getFirst("name");
                    Integer age=Integer.parseInt(Objects.requireNonNull(map.getFirst("age")));
                    System.out.println("name:"+name);
                    System.out.println("age:"+age);

                    Person person=new Person();
                    person.setName(name);
                    person.setAge(age);

                    return ServerResponse.ok().bodyValue(person);
                }))
                .build();
    }
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Java的Servlet来接收表单序列化数据。首先,您需要将表单数据序列化为字符串,并将其作为请求参数发送到Servlet。然后,您可以使用Java的HttpServletRequest对象来获取这些参数,并将其反序列化为Java对象。 以下是一个简单的示例代码,用于接收名为"formdata"的表单序列化数据: ```java import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FormServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单序列化数据 String formData = request.getParameter("formdata"); // 将序列化数据反序列化为Java对象 Map<String, String> formMap = null; try (InputStream is = new ByteArrayInputStream(formData.getBytes()); ObjectInputStream ois = new ObjectInputStream(is)) { formMap = (Map<String, String>) ois.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } // 处理表单数据 String name = formMap.get("name"); String email = formMap.get("email"); // 做出响应 response.setContentType("text/html"); response.getWriter().println("<html><body>" + "<h2>Form Data Received:</h2>" + "<p>Name: " + name + "</p>" + "<p>Email: " + email + "</p>" + "</body></html>"); } } ``` 这段代码假设您的表单数据是一个包含"name"和"email"字段的Map对象。您可以根据需要更改此代码以适应您的表单数据格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值