ExtJs 4使用RESTEasy 2.3.0.GA上传文件,无效的JSON响应

时间:2012-06-11 20:42:00

标签: extjs4 resteasy jboss6.x

关于这个主题有很多讨论,但没有真正的解决方案。

如果我使用

,这是我的问题

1)@Produce(“application / Json”)json响应显示在< pre>中标签

2)如果我使用@Produce(“application / html”)或@Produce(“text / html”),那么使用JAXB异常重新安排故障和错误输出:

Uncaught Ext.Error:您正在尝试解码无效的JSON字符串:

HTTP状态500 - 无法找到媒体类型的JAXBContextFinder:text / html

类型状态报告

消息无法找到媒体类型的JAXBContextFinder:text / html

描述服务器遇到内部错误(无法找到媒体类型的JAXBContextFinder:text / html),导致无法完成此请求。

JBoss Web / 3.0.0-CR2

我迫切希望得到一些帮助,并且表格中提出了一些解决方案: 1)将内容类型更改为text / html 2)更新ExtJs源代码 3)解析<预>从JSON响应中标记 不想做第二和第三,但在Ist中,我想要一个有效的JSON输出。我怎么能这样做?

这是我的serverice类:

 @POST
    @Path("/bulkUpdate")
    @Consumes("multipart/form-data")
    @Produces({"application/json"})
    public ExtjsJson<DataException> uploadFile(MultipartFormDataInput input) {

        Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
        List<InputPart> inputParts = uploadForm.get("uploadedFile");
        List<DataException> list = new ArrayList<DataException>();
        final ExtjsJson<DataException> returnObj = new ExtjsJson<DataException>();
        for (InputPart inputPart : inputParts) {
            try {
                MultivaluedMap<String, String> header = inputPart.getHeaders();
                String fileName  = getFileName(header);
                InputStream inputStream = inputPart.getBody(InputStream.class, null);
                byte[] bytes = IOUtils.toByteArray(inputStream);

                //handle the excel file upload and return the error if the file does not have valid data some like...
                DataException error = new DataException("supervisor", "columnName", 1, "SheetName", "this is not a valid supervisor");   
                list.add(error);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        returnObj.setSuccess(true);
        returnObj.setResults(list);
        return returnObj;
    }

这是我的响应Object DataException.java

@Data
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class DataException {

    //private static final long serialVersionUID = 1L;

    /** excel sheet name */
    private String sheetName;

    /** row number of the excel sheet */
    private int rowNumber;

    /** field name/cell header **/
    private String fieldName;

    /** cell value */
    private String fieldValue;

    private String description;
}

这是错误(带标记的JSON响应)

Uncaught Ext.Error:您正在尝试解码无效的JSON字符串:&lt; pre style =“word-wrap:break-word; white-space:pre-wrap;”&gt; {“total”:1 ,“success”:true,“results”:[{“description”:“这不是有效的主管”,“fieldName”:“supervisor”,“fieldValue”:“testPM”,“rowNumber”:1,“sheetName” “:” 工作表Sheet“ }]}&LT; /预&GT;

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我的解决方案是:

  1. 使用@Produces("text/html")
  2. 您的方法需要将字符串发送回前端:

    public String uploadFile (...)

  3. 最简单的方法是在ExtjsJson类中实现一个toString()方法,该方法以String格式返回它。