Spring 启动 Api 不同响应的 CordaApp

CordaApp with Spring Boot Api different response

我已经将 cordapp 与 spring boot 集成。一个奇怪的观察发现来自 cordawebserver 和 spring boot 服务器的响应不同,例如

Blockquote

API:获取:market/me 给出

{
 “me”: {
   “commonName”: null,
   “organisationUnit”: null,
   “organisation”: “PartyG-CT”,
   “locality”: “Tokyo”,
   “state”: null,
   “country”: “JP”,
   “x500Principal”: {
     “name”: “O=PartyG-CT,L=Tokyo,C=JP”,
     “encoded”: “MDExCzAJBgNVBAYTAkpQMQ4wDAYDVQQHDAVUb2t5bzESMBAGA1UECgwJUGFydHlHLUNU”
   }
 }
}

带Spring开机 而使用 cordawebserver 我们得到:

   {
 “me”: “C=JP,L=Tokyo,O=PartyG-CT”
}

我们在不同的 API 中发现相同的行为 我们将不胜感激任何帮助

@GET
        @Path("peers")
        @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
   // CordaX500Name
        public Map<String, List<CordaX500Name>> getPeers() {
            List<NodeInfo> nodeInfoSnapshot = proxy.networkMapSnapshot();
            return ImmutableMap.of(
                    "peers",
                    nodeInfoSnapshot
                            .stream()
                            .map(node -> node.getLegalIdentities().get(0).getName())
                            .filter(name -> !name.equals(myLegalName) && !name.getOrganisation().equals(controllerName)
                                    && !name.getOrganisation().equals(NETWORK_MAP_NAME))
                            .collect(toList()));
        }


//boot entry point
    @SpringBootApplication
    public class FacilityServer  {


        @Autowired
        public  static NodeRPCConnection nodeRPCConnection;
        /**
         * Starts our Spring Boot application.
         */
        public static void main(String[] args) throws Exception {
            SpringApplication springApplication = new SpringApplication();
            springApplication.setBannerMode(Banner.Mode.OFF);
            springApplication.run(FacilityServer.class, args);
        }

        @EventListener(ApplicationReadyEvent.class)
        public void initiateFacilityObserverPostStartup() throws Exception{

            FacilityObserver.startFacilityWatch();

        }



// this class for using the jersey instead of spring rest impltn
@Configuration
@ApplicationPath("rest")
public class JerseyConfig extends ResourceConfig {



    public JerseyConfig() {



    }

    @PostConstruct
    public void setUp() {
        register(MarketApi.class);
        //register(GenericExceptionMapper.class);
    }
}

我找到了解决方案;根据 corda 文档,我们需要注册 cordajackson 映射器。然后,我们将能够得到与 corda webserer 中相同的响应。 例如:

List<StateAndRef<YourState>> vaultStatesList =  vaultStates.getStates();  

ObjectMapper mapper = JacksonSupport.createNonRpcMapper();
String json = mapper.writeValueAsString(vaultStatesList);