Чтобы декодировать URL-аргументы в цвет, я использую этот HttpMessageConverter:
public class ColorHttpMessageConverter implements HttpMessageConverter<Color> {
@Override
public boolean canRead(Class<?> clazz, MediaType mediaType) {
return clazz == Color.class;
}
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
return clazz == Color.class;
}
@Override
public List<MediaType> getSupportedMediaTypes() {
return Collections.singletonList(MediaType.ALL);
}
@Override
public Color read(Class<? extends Color> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {
byte[] buff = new byte[6];
if (inputMessage.getBody().read(buff) != buff.length) {
throw new HttpMessageNotReadableException("Must read 6 bytes.");
}
String c = new String(buff);
return Color.decode("#" + c);
}
@Override
public void write(Color t, MediaType contentType, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {
outputMessage.getBody().write(Integer.toHexString(t.getRGB()).substring(2).getBytes());
}
}
Затем я пишу rest-контроллер с таким отображением:
@Transactional
@RequestMapping("a.jpg")
public ResponseEntity<BufferedImage> getA(Color textcolor) throws IOException {
Я вызываю URL http://localhost:8080/myapp/rest/a.jpg?textcolor=ffffff
, но в консоли я получаю только это:
No primary or default constructor found for class java.awt.Color
Есть идеи?