springboot亲测rest协议支持,date类型返回

2021-04-27 07:27

阅读:424

标签:tpc   str   cli   ret   order   pac   没有   协议   parameter   

今天花了一下午的时间搞了一下dubbo service支持http访问的demo
从dubbo 2.6.0 开始dubbo已经支持了http访问service的,网上也找了一下我的环境是springboot+dubbo的,网上的dubbo都是用xml去配置的,我的是springboot没有xml

1)修改配置

注释原来的dubbo配置

  1. #spring.dubbo.protocol.name = dubbo
  2. #spring.dubbo.protocol.port = 21017

修改成

  1. spring.dubbo.protocols.dubbo.name=dubbo
  2. spring.dubbo.protocols.dubbo.port=21017
  3. spring.dubbo.protocols.rest.name=rest
  4. spring.dubbo.protocols.rest.port=31017
  5. spring.dubbo.protocols.rest.server=tomcat

2)添加依赖

  1. javax.ws.rs
  • javax.ws.rs-api
  • 2.0
  • org.jboss.resteasy
  • resteasy-client
  • 3.0.19.Final
  • org.springframework.boot
  • spring-boot-starter-tomcat
  • org.hibernate.validator
  • hibernate-validator
  • 6.0.13.Final
  • 3)修改实现类,官方也是这么建议的

    1. import javax.ws.rs.GET;
    2. import javax.ws.rs.Path;
    3. import javax.ws.rs.Produces;
    4. import javax.ws.rs.core.MediaType;
    5. /**
    6. * @Path 添加访问前缀 跟@RequestMapping这个注解差不多
    7. * @GET 使用get访问
    8. * @Produces 是指返回给消费者的时候,是以json格式返回,如果是对象,会自动转换成json
    9. * @Service 注解添加要支持的协议,上面的测试代码是支持两种协议
    10. * 官方文档 http://dubbo.apache.org/zh-cn/docs/user/references/protocol/rest.html
    11. */
    12. @Slf4j
    13. @Component
    14. @Service(interfaceClass = OrderDemoService.class,protocol = {"rest","dubbo"})
    15. @Path("/order")
    16. public class OrderDemoServiceImpl implements OrderDemoService {
    17. @Path("/get")
    18. @GET
    19. @Produces({MediaType.APPLICATION_JSON + "; " + MediaType.CHARSET_PARAMETER + "=UTF-8"})
    20. @Override
    21. public String getOrder() {
    22. return "www.phpsong.com";
    23. }
    24. }

    我这测试通过了

    4)JSON返会的问题

    对象或map返回的时候会提示

     

    1. org.jboss.resteasy
    2. resteasy-jackson-provider
    3. 3.0.19.Final

    说一下网上找的资料不正确的

    springboot+dubbo 多协议的配置

    1. dubbo.protocols.dubbo.name=dubbo
    2. dubbo.protocols.dubbo.port=20017
    3. dubbo.protocols.rest.name=rest
    4. dubbo.protocols.rest.port=30017
    5. dubbo.protocols.rest.server=tomcat

    结果我启动的时候提示

    1. java.lang.NullPointerException: beanName=orderDemoServiceImpl, registry=rest not found in multi configs

    还有一种配置是添加配置类

    1. @Configuration
    2. @Slf4j
    3. public class config {
    4.  
    5. @Bean("dubbo")
    6. public ProtocolConfig dubboProtocolConfig() {
    7. ProtocolConfig protocolConfig = new ProtocolConfig();
    8. protocolConfig.setName("dubbo");
    9. int port = 20016;
    10. log.info("dubbo provider dubbo port = {}", port);
    11. protocolConfig.setPort(port);
    12. protocolConfig.setId("dubbo");
    13. protocolConfig.setServer(null);
    14. return protocolConfig;
    15. }
    16.  
    17. @Bean("rest")
    18. public ProtocolConfig restProtocolConfig() {
    19. ProtocolConfig protocolConfig = new ProtocolConfig();
    20. protocolConfig.setName("rest");
    21. int port = 30016;
    22. log.info("dubbo provider rest port = {}", port);
    23. protocolConfig.setPort(port);
    24. protocolConfig.setId("rest");
    25. protocolConfig.setServer("tomcat");
    26. return protocolConfig;
    27. }
    28. }

    还是一样的错误提示

    1. java.lang.NullPointerException: beanName=orderDemoServiceImpl, registry=rest not found in multi configs

    大概的意思是说找不到rest协议的配置,因为我在@service注解上添加了rest协议的配置

    最近在开发项目的时候发现springboot返回给前端的是时间戳,百度了一下这个问题,有两个解决方式
    在它的get方法上也添加:
    @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+08:00”)

    1. @Data
    2. class Person{
    3. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    4. private Date createTime;
    5. }

    还有一种方式加到配置文件里,全局都有效

    1. spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
    2. spring.jackson.time-zone=GMT+8

    第一行指定date输出格式为yyyy-MM-dd HH:mm:ss;
    第二行指定时区,解决8小时的时间差问题。

    springboot亲测rest协议支持,date类型返回

    标签:tpc   str   cli   ret   order   pac   没有   协议   parameter   

    原文地址:https://www.cnblogs.com/ynog/p/13245864.html


    评论


    亲,登录后才可以留言!