Как спроектировать Jax - RS для двух разных методов с одним и тем же путем и производящих / потребляющих один и тот же тип носителя? - PullRequest
1 голос
/ 12 января 2020

Я хочу создать почтовый сервис двумя способами. Имена методов будут другими. Эти два метода будут принимать разные объекты для вызовов. Но типы носителей Path и Production / потребление должны быть одинаковыми. Как это сделать? Пожалуйста, найдите этот код ниже. Это дает исключение типа «Модель ресурсов имеет неоднозначный (под) метод ресурсов для HTTP-метода POST и входных типов mime, как определено аннотациями« @Consumes »и« @Produces »в методах Java», при развертывании в weblogi. c.


package com.adac.rest.service;

import javax.ws.rs.Path;
import javax.ws.rs.POST;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import com.adac.rest.model.Response;
import com.adac.rest.model.SalesData;
import com.adac.rest.model.Tax;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;


@Path("/rest")
public class StageDataLoadingService {

    @POST
    @Path("/dataloading")
    @Consumes("application/json")
    @Produces("application/json")
    public String resourceMethodPUTSalesData(SalesData sd) throws Exception  { 

        System.out.println("This method called with Sales Data");

        Response resp = new Response();
        resp.setStatuscode("0");
        resp.setStatusmessage("Success");

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        String json_resp = mapper.writeValueAsString(resp);



        String str1 = mapper.writeValueAsString(sd);
        System.out.println(str1);

       //String sd1 = mapper.writeValueAsString(sd);    
      //System.out.println(sd1);
       // JsonNode jsonNodeRoot = mapper.readTree(json_resp);

        return json_resp;

    }


      @POST

      @Path("/dataloading")

      @Consumes("application/json")

      @Produces("application/json") public String resourceMethodPUTTax(Tax tax)
      throws Exception {

      System.out.println("This method called with Tax");

      Response resp = new Response(); resp.setStatuscode("0");
      resp.setStatusmessage("Success");

      ObjectMapper mapper = new ObjectMapper();
      mapper.enable(SerializationFeature.INDENT_OUTPUT); String json_resp =
      mapper.writeValueAsString(resp);



      String str1 = mapper.writeValueAsString(tax); 
      System.out.println(str1);


      return json_resp;

      }

}

Также предложите конфигурации web. xml и weblogi c. xml для предлагаемого вами дизайна.

В настоящее время web. xml is :


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>ADACStageDataLoadingService</display-name>
    <servlet>
        <servlet-name>rest.application.config.ApplicationConfig</servlet-name>
    </servlet>
    <servlet-mapping>
        <servlet-name>rest.application.config.ApplicationConfig</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>


и weblogi c. xml:

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
    xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd">
    <wls:weblogic-version>12.2.1.3</wls:weblogic-version>
    <wls:context-root>ADACStageDataLoadingService</wls:context-root>
    <wls:library-ref>
        <wls:library-name>jax-rs</wls:library-name>
        <wls:specification-version>2.0</wls:specification-version>
        <wls:exact-match>false</wls:exact-match>
    </wls:library-ref>
</wls:weblogic-web-app>

1 Ответ

0 голосов
/ 13 января 2020

При разработке API я предлагаю вам следовать остальным передовым методам:

  • , если вы хотите вставить ресурс, используйте метод POST и используйте следующий @Path: /SalesData/{resourceId} (вы можете опустить «dataloading», потому что подразумевается в методе POST
  • , если вы хотите обновить ресурс, используйте метод PUT с тем же путем: /SalesData/{resourceId}
  • , если вы хотите удалить ресурс, используйте метод DELETE
...