我已经使用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服务注册表,则需要进行以下更改。
转到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的某些功能或正常行为?如果是,该如何解决?
答案 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-ribbon
,spring-cloud-starter-openfeign
和spring-cloud-starter-netflix-eureka-client
<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/
希望这对您有帮助