Studio Developer Manual / Version 2401
Table Of Contents
The note example has shown how to create a custom remote bean. However, in the real world you usually
have to deal with a list of remote beans, so let's improve the example by adding another
EntityController that is responsible for loading a list of notes.
First of all, you have to create the required Java classes for this. The model could look like this:
public class NoteList {
private List<Note> notes = new ArrayList<>();
public List<Note> getNotes() {
return notes;
}
public void setNotes(List<Note> notes) {
this.notes = notes;
}
}
Example 9.133. Java class for notes list
Next, the matching representation which looks the same again:
public class NotesRepresentation {
private List<Note> notes;
public NotesRepresentation(NoteList noteList) {
this.notes = noteList.getNotes();
}
public List<Note> getNotes() {
return notes;
}
}
Example 9.134. Notes list representation
So you can create the EntityController from it:
@RestController
@RequestMapping(value = "notes", produces = MediaType.APPLICATION_JSON_VALUE)
public class NotesEntityController implements EntityController<NoteList> {
private final NotesService notesService;
public NotesEntityController(NotesService notesService) {
this.notesService = notesService;
}
@Override
@NonNull
public NoteList getEntity(@NonNull Map<String, String> pathVariables) {
NoteList noteList = new NoteList();
noteList.setNotes(notesService.getNotes());
return noteList;
}
@GetMapping
public NotesRepresentation getRepresentation(@NonNull Map<String, String> pathVariables) {
NoteList entity = getEntity(pathVariables);
return new NotesRepresentation(entity);
}
@PutMapping
public ResponseEntity<NotesRepresentation> setRepresentation(@NonNull Map<String, String> pathVariables,
@RequestBody final Map<String, Object> json) {
//noinspection unchecked
notesService.setNotes((List<Note>) json.get("notes"));
NoteList entity = getEntity(pathVariables);
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(new NotesRepresentation(entity));
}
}
Example 9.135. NotesEntityController for notes list
The example returns a list of all notes of the NotesService. In addition to this, you can change the
list. Have a look at the code of the put mapping:
@PutMapping
public ResponseEntity<NotesRepresentation> setRepresentation(@NonNull Map<String, String> pathVariables,
@RequestBody final Map<String, Object> json) {
//noinspection unchecked
notesService.setNotes((List<Note>) json.get("notes"));
NoteList entity = getEntity(pathVariables);
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(new NotesRepresentation(entity));
}Example 9.136. Put mapping for notes list
The changed properties of the NotesList will be passed via the RequestBody. You can expect that its
structure is the same as in the NotesRepresentation, so the property notes will contain the changed
list of notes.
As a last step, you have to add the Spring bean to your Spring configuration:
@Bean
public NotesEntityController notesEntityController(NotesService notesService) {
return new NotesEntityController(notesService);
}Example 9.137. Adding a Spring bean to Spring configuration
Again, the Java part is finished and you can rebuild the extension and restart Studio.


