CXF және қосымша параметрлері

Мен Apache CXF-ді JAX-RS іске асыру ретінде пайдаланамын және қосымша «параметр параметрлері» туралы мәселе бар. Бұл кодты қараңыз:

@Path("/")
public class myClass {

    @PUT
    @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
    @Consumes(MediaType.APPLICATION_XML)
    Response updateStuff(
                    @PathParam("p1") String p1,
                    @PathParam("p2") Long p2,
                    @PathParam("p3") String p3,
                    @PathParam("p4") Long p4,
                    MyEntity entity); 
}

Егер субъект нөлге тең болмаса, барлығы жақсы жұмыс істейді.

Дегенмен, бос денемен сұрауларды орындағым келеді. Мен мұндай жағдайда ұйымның нөлдік болмайтынын күтемін. Бірақ бұл дұрыс емес. Дене жоқ болса, CXF әдісімді таба алмайды. Журналдарда бос хабарламалар туралы ескертуді таба аламын (AbstractJAXBProvider-дан) және бұл бәрі.

Сондай-ақ updateStuff әдісін жүктеуге тырыстық:

@Path("/")
public class myClass {

    @PUT
    @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
    @Consumes(MediaType.APPLICATION_XML)
    Response updateStuff(
                    @PathParam("p1") String p1,
                    @PathParam("p2") Long p2,
                    @PathParam("p3") String p3,
                    @PathParam("p4") Long p4,
                    MyEntity entity); 

    @PUT
    @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
    Response updateStuff(
                    @PathParam("p1") String p1,
                    @PathParam("p2") Long p2,
                    @PathParam("p3") String p3,
                    @PathParam("p4") Long p4); 
}

Бірақ ол да жұмыс істемеді.

Нөлдік идентификатор параметрлерін қалай өңдеуге болатыны туралы сізде қандай идеялар бар?

3

2 жауаптар

Үлгіні жүктеу әдісі, мысалдағыдай, жұмыс істейді (Apache-cxf 3.0 -де сыналған), бірақ ол клиентті әдісіне соққысы келгенде Content-Type: application/xml тақырыбын жіберуге болмайды қол қоюда.

Егер басқа медиа түрі сынып деңгейінде әлдеқашан анықталған болса, @Consumes (MediaType.WILDCARD) әдісін түсіндіріңіз, төмендегі мысалды қараңыз.

@Path("/")
@Consumes(MediaType.APPLICATION_XML)
public class myClass {

    @PUT
    @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
    Response updateStuff(
                    @PathParam("p1") String p1,
                    @PathParam("p2") Long p2,
                    @PathParam("p3") String p3,
                    @PathParam("p4") Long p4,
                    MyEntity entity); 

    @PUT
    @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
    @Consumes(MediaType.WILDCARD)
    Response updateStuff(
                    @PathParam("p1") String p1,
                    @PathParam("p2") Long p2,
                    @PathParam("p3") String p3,
                    @PathParam("p4") Long p4); 
}
0
қосылды

Егер сіз @Consumes (MediaType.APPLICATION_XML) торабын таңдайтын болсаңыз, онда дене нөлге ие болмайды. Бірақ MyEntity нысанын оқу үшін @Provider бар.

@Provider
@Consumes(MediaType.APPLICATION_XML)
public class XMLReader implements MessageBodyReader{

}
0
қосылды