Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.
Auszug
hiddentrue

Nuclos CustomRestRule: eigene REST-API, @Path, /rest/custom/, CustomRestContext, Response, Fehlerbehandlung, Beispiel (Java).

globe with meridians Sprache: Deutsch · English

open book Event - CustomRestRule

Eigene REST-Endpunkte in Nuclos bereitstellen – mit @Path, Kontext und sauberer Fehlerbehandlung.

Status
colourGrey
titleReferenz
Status
colourBlue
titleEntwickler
Status
colourGreen
titleStand: Jul 2026
Status
colourGrey
titlegilt fuer Nuclos 4.2026.x

Panel
bgColor#F4F5F7

Auf dieser Seite

Inhalt
maxLevel2
minLevel2

...

Wann greift die Regel?

Eine CustomRestRule

...

stellt eine eigene REST-Schnittstelle bereit. Sie wird direkt über den REST-Service

...

aufgerufen, ist unabhängig von Businessobjekten und

...

muss nicht über den

...

Regelmanager zugewiesen werden.

...

Die Berechtigung

...

erfolgt im Unterformular

...

„REST-Regeln“ der jeweiligen Benutzergruppe

...

.

...

Struktur & Aufruf

Die Klasse implementiert CustomRestRule. Endpunkte werden über @Path-Annotationen definiert. Alle CustomRest-Regeln haben den URL-Präfix /rest/custom/

...

.

Codeblock
languagejava

...

...

package example.rest;

import java.util.Arrays;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import org.nuclos.api.rule.CustomRestRule;

@Path("example")
public class CustomRestWithPathTestRule implements CustomRestRule {

	@GET
	@Path("customers")
	@Produces("application/json")
	public List<Customer> customers() {
		return Arrays.asList(
				new Customer(1, "Mustermann"),
				new Customer(2, "Meier")
		);
	}

	public static class Customer {
		private int id;
		private String name;

		public Customer(final int id, final String name) {
			this.id = id;
			this.name = name;
		}

		public int getId() {
			return id;
		}

		public String getName() {
			return name;
		}
	}
}

Der Aufruf des REST-Service wird über @Path Annotationen gesteuert.

CustomRestRegeln besitzen immer den URL-Prefix "/rest/custom/".

...

Aufruf von http://

...

<host>/nuclos/rest/custom/example/customers

...

liefert:

Codeblock
languagejs

...

[
	{
		id: 1,
		name: "Mustermann"
	},
	{
		id: 2,
		name: "Meier"
	}
]

...

Kontext

...

Über ein Context-Objekt

...

erhältst du Zugriff auf z.

...

​B. den aufrufenden Benutzer oder die Sprache

...

:

Codeblock
languagejava

...

@Inject
protected Provider<CustomRestContext> context;

// Dazu müssen noch drei weitere Klassen importiert werden:

import javax.inject.Inject;
import javax.inject.Provider;
import org.nuclos.api.context.CustomRestContext;

...

Fehlerbehandlung

Nicht abgefangene Exceptions meldet der Container (Tomcat) als HTTP 500. Für eigene Antworten die Exceptions mit try/catch behandeln und passende Response-Objekte liefern:

Codeblock
languagejava

...

...

package example.rest;


import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response; 
import org.nuclos.api.rule.CustomRestRule;
import org.nuclos.api.exception.BusinessException; 

@Path("Test") 
@Rule(name="HandleException", description="Demonstrates how to handle exception in CustomRest")
public class HandleException implements CustomRestRule {    

	@GET
    @Path("response/{parameter}")
    @Produces("application/json")
    public Response parameterTest(@PathParam("parameter") String parameter) {
		try {
        	if( this.functionToThrowException(parameter) ) {
            	return Response.status(Response.Status.FORBIDDEN).entity(new Message("Dieser User hat keine Berechtigung für das Ausführen der Regel.")).build();
			}
		} catch (BusinessException e) {
            // may also log error
            return Response.status(Response.Status.BAD_REQUEST).entity(new Message(e.getMessage())).build();
		}

        return Response.status(Response.Status.NO_CONTENT).build();
    }

	private boolean functionToThrowException(String parameter) throws BusinessException {
		if (parameter == null) {
			throw BusinessException("No parameter given");
		}

		return "failure".equals(parameter);
	}

	// Any DTO class for response, will be JSON converted
    public static class Message {
        
        String message;
        
        public Message(String message) {
            this.message = message;
        }
        
        public String getMessage() {
            return message;
        }
    }
}

Verwandte Seiten

open book Regeln (serverseitig)


Grundlagen.

Öffnen →