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

时间:2019-07-01 16:30:57

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

我已经使用Java8和SpringBoot使用Maven创建了一个微服务。 我们称之为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的某些功能或正常行为?如果是,该如何解决?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

有两种可能的解决方案:

首先:如果您的应用程序与XML转换无关,则从所有jackson-dataformat-xml工件中排除spring-cloud-starter-*依赖项。来自spring-cloud-starter-netflix-eureka-client的一个排除示例如下。就我而言,我不得不从spring-cloud-starter-netflix-ribbonspring-cloud-starter-openfeignspring-cloud-starter-netflix-eureka-client

中排除Jackson的依赖性
<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'

答案 2 :(得分:0)

嗨,我本人从未使用过Eureka,但是通过快速搜索,可以立即使用的API可以将XML转换为json,因为Eureka使用XML而不是json,因为json无法保存属性。 链接到该网站,解释如何执行此操作-> https://automationrhapsody.com/json-format-register-service-eureka/amp/

希望这对您有帮助