I'm not sure if I'm doing something wrong here, but from everything I can tell, the coordinate ordering from the GeometryJSON class is incorrect.
It seems to write the coordinate ordering as:
For every coordinate, which given the expected coordinate ordering in most of geotools, seems to be lat, long:
However, GeoJSON seems to be special in that its specification says that all coordinates should be:
For type "Point", each element in the coordinates array is a number representing the point coordinate in one dimension. There must be at least two elements, and may be more. The order of elements must follow x, y, z order (or longitude, latitude, altitude for coordinates in a geographic coordinate reference system). Any number of additional dimensions are allowed, and interpretation and meaning of these coordinates is beyond the scope of this specification.
It seems like the GeometryJSON class should respect the input Coordinate ordering and flip the output ordering correctly.