2013-07-30 25 views
1

我想處理一個JSON和FORM後用球衣結合JSR 303驗證POJO對象試圖處理JSON和FORM職位與POJO的澤西島

@POST 
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_FORM_URLENCODED}) 
@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_HTML}) 
public Response registration(@Valid User registration) { 
    UserServiceWrapper.getImpl().registrateUser(registration); 
    return Response.ok(registration).build(); 
} 

目前一切運行良好,有關對象json,但是表單帖子失敗;

HTTP/1.1 415不支持的媒體類型

我不知道如何解決這一問題,並保持POJO對象的接口。任何人的想法?

+0

請將'form' – alfasin

回答

1

看來這不支持默認的球衣2.0框架,修復這是創建自己的MessageBodyReader,見下文;

@Provider 
public class FormDataReader implements MessageBodyReader<Object> { 

    @Override 
    public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { 
     return mediaType.isCompatible(MediaType.APPLICATION_FORM_URLENCODED_TYPE); 
    } 

    @Override 
    public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException { 
     String queryString = IOUtils.toString(entityStream); 

     Object result = type.newInstance(); 
     BeanUtils.copyProperties(result, getUrlParameters(queryString)); 
     return result; 
    } 

    public static Map<String, String> getUrlParameters(String queryString) 
      throws UnsupportedEncodingException { 
     Map<String, String> params = new HashMap<String, String>(); 
     for (String param : queryString.split("&")) { 
      String pair[] = param.split("="); 
      String key = URLDecoder.decode(pair[0], "UTF-8"); 
      String value = ""; 
      if (pair.length > 1) { 
       value = URLDecoder.decode(pair[1], "UTF-8"); 
      } 
      params.put(new String(key), new String(value)); 
     } 
     return params; 
    } 

}