Java REST рд╕реЗрд╡рд╛ рдЖрд╕рд╛рди рд╣реИ

рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рддрдХрдиреАрдХ рд░рд╛рдХреНрд╖рд╕реА рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдореЗрдЧрд╛-рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдШрдЯрдХреЛрдВ рд╕реЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг REST рд╕реЗрд╡рд╛ рдХреЛ рдЪреБрдирд╛ред рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд░реНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, Google Guice рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдореБрдХ рдФрд░ рдЬреАрд╡рди рд╕реЗ рддрд▓рд╛рдХрд╢реБрджрд╛ рдкреНрд░рддреАрдд рд╣реЛред рдореИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рдЧрднрдЧ 50 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкреВрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ XML рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рддреЛ, рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ:

1. рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рдХреЙрд▓ рдХрд╛рдЙрдВрдЯрд░ рд╣реЛрдиреЗ рджреЗрдВ:
@Singleton
public static class Counter {
private final AtomicInteger counter = new AtomicInteger(0);
public int getNext() {
return counter.incrementAndGet();
}
}


* This source code was highlighted with Source Code Highlighter .


рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЬреВрд╕ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП :)

2. рд╣рдо рдЙрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдХреБрдЫ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдЧреА, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЦреАрдВрдЪреЗрдЧреА:
@Path( "/hello" )
public static class Resource {

@Inject Counter counter;

@GET
public String get () {
return "Hello, User number " + counter.getNext();
}
}


* This source code was highlighted with Source Code Highlighter .


3. рдЕрдм рдЬрд░реНрд╕реА рдФрд░ рдЧреБрдЗрд╕реЗ рд╕реЗ рджреЛрд╕реНрддреА рдХрд░реЗрдВред рдореИрдВрдиреЗ рддреИрдпрд╛рд░ рдПрдХреАрдХрд░рдг рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛, рдЗрд╕реЗ рдЬрд░реНрд╕реА-рдЧрд╛рдЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХреАрдХрд░рдг рд╕реЗрд╡рд╛ / рдлрд╝рд┐рд▓реНрдЯрд░ GuiceContainer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ guice-servlet-рдореЙрдбреНрдпреВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ ServletModule рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЬрд┐рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ GuiceContainer рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЬрд░реНрд╕реА рдХреЛ Guice рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

public static class Config extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector( new ServletModule(){
@Override
protected void configureServlets() {
bind(Resource. class );
bind(Counter. class );
serve( "*" ).with(GuiceContainer. class );
}
});
}
}


* This source code was highlighted with Source Code Highlighter .


рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░, рд╣рдордиреЗ рдХрд╛рдЙрдВрдЯрд░ рдФрд░ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдмрд╛рдЙрдВрд╕ рдХрд┐рдпрд╛ред

4. рд╕рд░реНрд╡рд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рд╕рд╛рд░рд╛ рд╕рд╛рдорд╛рди рдЪрд▓рд╛рдирд╛ рдмрд╛рдХреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпреБрджреНрдз-рдХреВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдЯреЙрдордХреИрдЯ рдкрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдПрдореНрдмреЗрдбреЗрдб рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЗрдЯреНрдЯреА рдФрд░ рдЧреНрд░рд┐рдЬрд╝рд▓реА рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЖрдЦрд┐рд░реА рд╡рд╛рд▓рд╛ рдЪреБрдирд╛ред рдпрд╣рд╛рдБ рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реИ:

public static void main( String [] args) throws Exception {
int port = Integer.valueOf(System.getProperty( "port" ));
GrizzlyWebServer server = new GrizzlyWebServer(port);
ServletAdapter adapter = new ServletAdapter( new DummySevlet());
adapter.addServletListener(Config. class .getName());
adapter.addFilter( new GuiceFilter(), "GuiceFilter" , null );
server.addGrizzlyAdapter(adapter, new String []{ "/" });
server.start();
}


* This source code was highlighted with Source Code Highlighter .


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдЦрд╛рд▓реА рд╕рд░реНрд╡рд▓реЗрдЯ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

@SuppressWarnings( "serial" )
public static class DummySevlet extends HttpServlet { }


* This source code was highlighted with Source Code Highlighter .


рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Guice рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╕рд░реНрд╡рд▓реЗрдЯреНрд╕ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЧреНрд░рд┐рдЬрд╝рд▓реА рдХрд┐рд╕реА рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╢рд╛рдпрдж рдпрд╣реА рд╕рдм рд╣реИред рдЕрдЧрд▓рд╛, рдореИрдВ рдкреВрд░рд╛ рдХреЛрдб рджреВрдВрдЧрд╛:

public class App {

@Path( "/hello" )
public static class Resource {

@Inject Counter counter;

@GET
public String get () {
return "Hello, User number " + counter.getNext();
}
}

@Singleton
public static class Counter {
private final AtomicInteger counter = new AtomicInteger(0);
public int getNext() {
return counter.incrementAndGet();
}
}

public static class Config extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector( new ServletModule(){
@Override
protected void configureServlets() {
bind(Resource. class );
bind(Counter. class );
serve( "*" ).with(GuiceContainer. class );
}
});
}
}

@SuppressWarnings( "serial" )
public static class DummySevlet extends HttpServlet { }

public static void main( String [] args) throws Exception {
int port = Integer.valueOf(System.getProperty( "port" ));
GrizzlyWebServer server = new GrizzlyWebServer(port);
ServletAdapter adapter = new ServletAdapter( new DummySevlet());
adapter.addServletListener(Config. class .getName());
adapter.addFilter( new GuiceFilter(), "GuiceFilter" , null );
server.addGrizzlyAdapter(adapter, new String []{ "/" });
server.start();
}
}


* This source code was highlighted with Source Code Highlighter .


UPD: рд╕реНрд░реЛрдд

Source: https://habr.com/ru/post/In115718/


All Articles