Eureka 的 Springboot 错误,浏览器显示 xml 而不是 json

Springboot error for Eureka with browsers showing xml instead of json

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

它有控制器,returns 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. 对微服务A做如下修改-

转到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 的某些内容或它的正常行为?如果是,我该如何解决?

嗨,我自己从未使用过 Eureka,但通过快速搜索,可以使用 API 将 XML 转换为 json,因为 Eureka 使用 XML 和不是 json 因为 json 不能保存属性。 Link 到解释如何执行此操作的站点 -> https://automationrhapsody.com/json-format-register-service-eureka/amp/

希望这对你有所帮助

如果您使用的是旧版本的 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>

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

首先:如果您的应用程序与 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: header 与请求一起传递给您的 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'