【问题标题】:Springboot error for Eureka with browsers showing xml instead of json浏览器显示 xml 而不是 json 的 Eureka 的 Springboot 错误
【发布时间】:2019-11-12 07:38:33
【问题描述】:

我使用 Java8 创建了一个微服务,并使用 Maven 创建了 SpringBoot。 让我们称之为 MicroServiceA

它有一个返回 ResponseEntity 对象的控制器,如下所示:

    @RestController
    @RequestMapping("/api")
    public class MicroserviceAController {  


        @GetMapping(value = "/all")
        public ResponseEntity<ServiceAResponseWrapper<List<ServiceADto>>> getAll() {

ServiceAResponseWrapper<List<ServiceADto>> wrapper = 
    new ServiceAResponseWrapper<List<ServiceADto>>(ServiceAResponseStatus.SUCCESS,findAll());

return new ResponseEntity<ServiceAResponseWrapper<List<ServiceADto>>>(wrapper,HttpStatus.OK);

        }

      public static List<ServiceADto> findAll() {
        //returns list of ServiceADto objects
    }

    }

当我启动此服务并在任何浏览器中验证它时:http://localhost:8073/api/all/,我会显示 JSON 响应。

现在,如果我想将我的服务引入 EUREKA 服务注册中心,那么我需要进行以下更改。

  1. 创建 EUREKA 服务器微服务。我开始了 - http://localhost:8761/
  2. 对 MicroserviceA 进行如下更改 -

转到 pom.xml 并添加依赖项

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

转到 application.yml 并添加以下内容:

eureka:
  client:
    registerWithEureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka/

一旦我开始服务,我就会开始在服务器 http://localhost:8761/ 上看到它

现在我再次转到浏览器并尝试检查我的微服务 http://localhost:8073/api/all/ 我看到的是 XML 而不是 JSON。

我什至尝试通过修改我的微服务控制器来修复它 我的方法的注释:

@Produces( { MediaType.APPLICATION_JSON} )

但我也看到了 XML 而不是 JSON。

我是否缺少 EUREKA 的某些内容或其正常行为?如果是,我该如何解决?

【问题讨论】:

    标签: java json xml spring-boot netflix-eureka


    【解决方案1】:

    您好,我本人从未使用过 Eureka,但通过快速搜索,有一个现成的 API 可以将 XML 转换为 json,因为 Eureka 使用 XML 而不是 json,因为 json 不能保存属性。 链接到解释如何执行此操作的站点 -> https://automationrhapsody.com/json-format-register-service-eureka/amp/

    希望对你有所帮助

    【讨论】:

      【解决方案2】:

      如果你使用的是旧版本的 spring cloud starter,你可能需要排除 Jackson 数据格式 XML 依赖

            <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-eureka</artifactId>
              <exclusions>
                  <exclusion>
                      <groupId>com.fasterxml.jackson.dataformat</groupId>
                      <artifactId>jackson-dataformat-xml</artifactId>
                  </exclusion>
              </exclusions>
          </dependency>
      

      【讨论】:

      • spring-cloud-starter-eureka 已弃用。这就是我使用 spring-cloud-starter-netflix-eureka-client 的原因。谢谢,问题已经解决了。
      • spring-cloud-starter-netflix-eureka-client 中的排除项对我有用。谢谢
      【解决方案3】:

      对此有两种可能的解决方案:

      首先:如果您的应用程序与 XML 转换无关,则从所有 spring-cloud-starter-* 工件中排除 jackson-dataformat-xml 依赖项。下面是spring-cloud-starter-netflix-eureka-client 的一个排除示例。对于我的情况,我必须从 spring-cloud-starter-netflix-ribbonspring-cloud-starter-openfeignspring-cloud-starter-netflix-eureka-client 中排除 Jackson XML 依赖项

      <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-eureka</artifactId>
              <exclusions>
                  <exclusion>
                      <groupId>com.fasterxml.jackson.dataformat</groupId>
                      <artifactId>jackson-dataformat-xml</artifactId>
                  </exclusion>
              </exclusions>
      </dependency>
      

      第二:如果你想同时支持 XML 和 JSON 响应。您可以将 Accept: 标头与请求一起传递给您的 API。

      获取 JSON 响应:

      curl -X GET \
        http://localhost:8073/api/all/ \
        -H 'Accept: application/json' 
      

      为了得到 XML 响应:

      curl -X GET \
        http://localhost:8073/api/all/ \
        -H 'Accept: application/xml'
      

      【讨论】:

        猜你喜欢
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 2012-03-27
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        相关资源
        最近更新 更多