[ADV] Online Java Academy 2016 - S02 E06 Vorige deel Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • zeef
  • Registratie: Januari 2000
  • Laatst online: 07:17
Java is een van de populairste programmeertalen, die tegenwoordig veel gebruikt wordt voor de ontwikkeling van Android-apps, maar het lukt maar een handjevol enthousiastelingen om deze taal zelf onder de knie te krijgen. Vorig jaar leerde je bij de Online Java Academy, powered by Tweakers en Capgemini, hoe je een android app maakte, maar om echt de volgende stap te zetten heeft jouw app een "backend" nodig.

Maak een RESTful API en serverapplicatie in Java.
In deze reeks van 12 tutorials leer je hoe je data verzamelt en opslaat in een database, en hoe je deze data uiteindelijk in een mobile of web applicatie kan laten zien. We laten zien wat de cloud is en hoe je je server toegankelijk maakt voor alle apparaten op het internet. Om ervoor te zorgen dat je app interessant blijft, laten we de applicatie zelfstandig nieuwe data op internet ontdekken via verschillende integraties met bijvoorbeeld youtube.

Praktische info
Alle 12 afleveringen zijn per vandaag beschikbaar op deze pagina, zodat je in je eigen tempo de hele serie kunt bekijken. In iedere video geven we je makkelijke en moeilijke challenges voor extra verdieping en uitdaging. Bij iedere aflevering is een apart forumtopic beschikbaar waar vragen gesteld kunnen worden en/of kennis gedeeld.

Winactie
Ook dit keer hebben we weer een mooie winactie geregeld. Bekijk de video’s, geef de juiste antwoorden op een vijftal vragen en maak zo kans op een Java Track naar keuze, beschikbaar gesteld door Capgemini Academy. Bekijk hier de vragen, spelregels en voorwaarden.

Tutorial 6: De API uitbreiden: een POST endpoint om data van de gebruiker op te slaan

Nu al onze data uit een echte database komt, gaan we kijken hoe we zelf nieuwe data kunnen toevoegen via de API. We kijken hiervoor naar de HTTP POST methode, hoe we deze kunnen testen met Postman en hoe we data kunnen valideren die de gebruiker invoert.

Wat vind je van deze tutorial? Loop je ergens tegenaan of wil je meer weten? Laat het ons weten!

[ Voor 36% gewijzigd door zeef op 01-08-2016 11:20 ]


  • nappie87
  • Registratie: Juli 2011
  • Laatst online: 02-09 18:43
Volgens mij zit er een fout in de code, de annotatie @NotNull in de Product class (bij de property name) voorkomt niet dat een lege string gepost wordt, ik zou daarvoor de annotatie @Size(min=1) toevoegen aan de property name

Beginner Challenge

Java: Product.java
19
20
21
22
    @Column(nullable=false)
    @NotNull
    @Size(min=1, max=200)
    private String name;


Java: ProductList.java
17
18
19
20
    @Column(nullable=false)
    @NotNull
    @Size(min=5, max=200)
    private String name;


Voor de advanced challenge zou ik graag een validator willen hebben / maken die te hergebruiken is bij andere (toekomstige methods). En dan eigenlijk een validator die de argument van de method (in dit geval addProduct) controleert voordat de method uitgevoerd wordt. De validator zou dan de volgende validatie uitvoeren:

Java:
1
2
3
4
public boolean validate(long productId) {
    Product product = productRepository.findOne(productId);
    return (product != null)
}


Mij huidige oplossing is een null check in de addProduct method

Java: productListController.java
36
37
38
39
40
41
42
43
44
45
46
47
    @RequestMapping(path = "/lists/{listId}/products", method = RequestMethod.POST)
    public void addProduct(@PathVariable("listId") long listId,
                           @RequestParam("productId") long productId) throws IllegalArgumentException {
        ProductList productList = productListRepository.findOne(listId);
        Product product = productRepository.findOne(productId);

        if(product == null) throw new IllegalArgumentException("The product with productId: " + productId + " does not exist");
        if(productList == null) throw new IllegalArgumentException("The productList with listId: " + listId + " does not exist");

        productList.getProducts().add(product);
        productListRepository.save(productList);
    }


en een extra exceptionHandler in de ExceptionHandlingControllerAdvice Class

Java: ExceptionHandlingControllerAdvice.java
4
5
6
7
8
9
10
    @ResponseStatus(value= HttpStatus.BAD_REQUEST)
    @ExceptionHandler(IllegalArgumentException.class)
    public void error(IllegalArgumentException exception,
                      HttpServletResponse response) throws IOException {

        response.sendError(HttpStatus.BAD_REQUEST.value(), exception.getMessage());
    }


Dus ik ben benieuwd of iemand een elegantere oplossing heeft die voorkomt dat je zelf exceptions moet werpen.

GitHub Tutorial 6
GitHub Challenges Tutorial 6

  • djgeronimo
  • Registratie: Februari 2006
  • Laatst online: 24-08 16:10
nappie87 schreef op donderdag 11 augustus 2016 @ 13:39:
Volgens mij zit er een fout in de code, de annotatie @NotNull in de Product class (bij de property name) voorkomt niet dat een lege string gepost wordt, ik zou daarvoor de annotatie @Size(min=1) toevoegen aan de property name
Je kan hier nog eenvoudiger de @NotEmpty of @NotBlank annotatie voor gebruiken. Linkje naar StackOverflow.