2

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

如果我使用,这是我的问题

1) @Produce("application/Json") json 响应显示在 <pre> 标记中

2) 如果我使用@Produce("application/html") 或@Produce("text/html"),那么简单的故障和错误会出现 JAXB 异常:

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

HTTP 状态 500 - 找不到媒体类型的 JAXBContextFinder:文本/html

类型状态报告

消息找不到媒体类型的 JAXBContextFinder:文本/html

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

JBoss Web/3.0.0-CR2

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

这是我的服务类:

 @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;
    }

这是我的响应对象 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 响应)

未捕获的 Ext.Error:您正在尝试解码无效的 JSON 字符串:<pre style="word-wrap: break-word; white-space: pre-wrap;">{"total":1,"success": true,"results":[{"description":"这不是一个有效的主管","fieldName":"supervisor","fieldValue":"testPM","rowNumber":1,"sheetName":"sheet1" }]}</pre>

4

1 回答 1

0

我有同样的问题,我的解决方案是:

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

    public String uploadFile (...)

  3. 最简单的方法是在 ExtjsJson 类中实现一个toString()方法,该方法以字符串格式返回它。
于 2012-09-11T13:15:46.240 回答