Skip to content

v2.0.0-RC1

Pre-release
Pre-release

Choose a tag to compare

@damianmalczewski damianmalczewski released this 03 May 19:18
· 15 commits to main since this release
Immutable release. Only release title and notes can be modified.
  1. Maven:
    <dependencies>
        <dependency>
            <groupId>io.github.problem4j</groupId>
            <artifactId>problem4j-core</artifactId>
            <version>2.0.0-RC1</version>
        </dependency>
    </dependencies>
  2. Gradle (Kotlin DSL):
    dependencies {
        implementation("io.github.problem4j:problem4j-core:2.0.0-RC1")
    }

Important

The primary point of release 2.0.0 is refinement and cleanup of the library's public API. It simplifies the API for Problem by providing a single getExtensions() method for problem extension members management, returning an unmodifiable Map, and drops abstract implementations in favour of keeping most of the the internals as package-private.

Migration guide will be noted for the final 2.0.0 release.

Added

  • Add DefaultProblemMapper to replace AbstractProblemMapper and ProblemMapper.create().
  • Add StatusTitleResolver SPI to allow users to provide custom resolution of status code into title. To be used with HTTP status enums depending on the user's framework.
  • Add ProblemSupport for common utilities.

Changed

  • Make all methods in Problem, ProblemBuilder and ProblemContext interfaces non-default.
  • Make Problem.Extension not extend Map.Entry and instead be a simple data class with name and value properties.
  • Reorganize interface default methods.

Removed

  • Remove deprecated methods from ProblemBuilder.
  • Minify number of methods in Problem - plain getExtensions() returning Map<String, Object> is enough.
  • Remove deprecated ProblemStatus enum from public API. The resolution of status code into title is still supported and available for extension via StatusTitleResolver SPI.
  • Remove AbstractProblem class - use Problem objects created via Problem.builder() or static factory methods. Custom implementations of Problem can be created by implementing the Problem interface.
  • Remove AbstractProblemBuilder class - use Problem.builder() static method to get default builder implementation. Custom implementations of ProblemBuilder can be created by implementing the ProblemBuilder interface.
  • Remove AbstractProblemContext class - use ProblemContext objects created via ProblemContext.create() static method. Custom implementations of ProblemContext can be created by implementing the ProblemContext interface.
  • Remove AbstractProblemMapper class - use DefaultProblemMapper instead.